我有一个按钮,可以将项目移动到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");
}
Run Code Online (Sandbox Code Playgroud) 继之前后如何更新数组的顺序.我遵循迈克尔·贝斯特的建议,并使用splice()修改按钮单击时我的数组的顺序
self.moveup = function (itemIndex) {
var i = self.itemList.indexOf(itemIndex);
if(i >= 1){
var array = self.itemList();
self.itemList.splice(i-1, 2, array[i], array[i-1]);
}
Run Code Online (Sandbox Code Playgroud)
我遇到麻烦的地方是增加数组中的项目.从阅读Array Splice的用法第一个参数指示了向上移动的位置我认为会是这样i+1,值2表示阵列中有多少项会改变所以没有变化那么我想的范围就是当我增加位置时,所选项目数组[i]和结尾将是[i + 1].
self.itemList.splice(i+1, 2, array[i], array[i+1]);
Run Code Online (Sandbox Code Playgroud)
在附加的提琴手中,您可以看到值增加,但项目实际上并没有改变顺序,只有当您按下向下按钮时它们才会复制.我希望结果与调用moveUp时的结果相同.
我很感激我在这里缺少的任何指示.http://jsfiddle.net/rlcrews/SCWmk/5/
-干杯