我有一个按钮,可以将 observableArray 中的项目向左移动一个位置。我正在按照以下方式进行操作。然而,缺点是categories()[index]被从数组中删除,从而丢弃了该节点上的任何DOM操作(在我的例子中是通过jQuery验证)。
有没有一种方法可以在不使用临时变量的情况下交换两个项目,从而保留 DOM 节点?
moveUp: function (category) {
var categories = viewModel.categories;
var length = categories().length;
var index = categories.indexOf(category);
var insertIndex = (index + length - 1) % length;
categories.splice(index, 1);
categories.splice(insertIndex, 0, category);
$categories.trigger("create");
}
这是我的版本moveUp
一步完成交换:
moveUp: function(category) {
var i = categories.indexOf(category);
if (i >= 1) {
var array = categories();
categories.splice(i-1, 2, array[i], array[i-1]);
}
}
但这仍然不能解决问题,因为 Knockout 仍然会将交换视为删除和添加操作。有一个开放问题 https://github.com/SteveSanderson/knockout/issues/259不过,Knockout 支持移动物品。Update:从版本 2.2.0 开始,Knockout 确实可以识别移动的项目和foreach
绑定不会重新渲染它们。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)