继之前的帖子 https://stackoverflow.com/questions/10258086/how-do-i-swap-two-items-in-an-observablearray关于如何更新数组的顺序。我遵循 Michael Best 的建议,并使用 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]);
}
我遇到麻烦的地方是增加数组中的项目。从阅读Array Splice的用法 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice第一个参数指示应该在哪里进行更改以便向上移动,我认为这将是i+1
,值 2 表示数组中有多少项会发生变化,因此没有变化,然后我认为范围将是选定的项 array[i] ,随着我增加位置,结尾将是 [i+1] 。
self.itemList.splice(i+1, 2, array[i], array[i+1]);
在附加的提琴手中,您可以看到值增加,但项目实际上并没有改变顺序,它们只是在您按下向下按钮时复制。我预计结果与调用 moveUp 时的结果相同。
如果有任何关于我在这里缺少的内容的指示,我将不胜感激。http://jsfiddle.net/rlcrews/SCWmk/5/ http://jsfiddle.net/rlcrews/SCWmk/5/
-cheers
差不多了。我是这样做的。 http://jsfiddle.net/MattiasBuelens/jA9sS/
当向上移动一个项目时,您需要将其与前一个项目交换。因此,您需要替换索引处的元素i-1
and i
with array[i]
and array[i-1]
, 分别。你的moveup
方法正是这样做的,所以一切都很好。
现在,当向下移动一个项目时,您需要将其与next物品。因此,您可以替换索引处的元素i
and i+1
with array[i+1]
and array[i]
, 分别。但是您的代码更改了元素i+1
and i+2
,这不好。相反,你应该这样做:
self.itemList.splice(i, 2, array[i+1], array[i]);
你开始拼接i
(当你删除元素时i
and i+1
)并将它们替换为(在该索引处插入)array[i+1]
and array[i]
.
另一方面,您对是否可以向下移动该项目的检查是不正确的。唯一不应该向下移动的项目是最后一项,即索引处的元素self.itemList().length-1
。因此,检查应该看起来像if (i < array.length - 1) { ... }
(见小提琴)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)