我正在使用Knockout.js作为我的页面。我的ViewModel包含一个对象数组。每个Object包含一个Childs数组。更一般地说,这应该代表一个包含列和列内容的表。
首先我要处理foreach:itemArray以获取列。然后我使用嵌套的foreach:childs,其中childs是列内容的数组。
我的孩子应该在列之间拖动。因此我用找到的js替换了嵌套的foreach
https://github.com/rniemeyer/knockout-sortable
http://jsfiddle.net/rniemeyer/Jr2rE/
再次使用代码 - 第一阶段:
<div id="lanesContainer" data-bind="foreach: lanes">
然后跟随嵌套的foreach(在#lanesContainer中)
<ul data-bind="sortable: { template: 'laneTemplate', data: childs, afterMove: $root.dropCallback }">
我的物品现在可以拖拽,但掉线有点失败。我的调试器在js的以下部分中断:
//take destroyed items into consideration
if (!templateOptions.includeDestroyed) {
targetUnwrapped = targetParent();
for (i = 0; i < targetIndex; i++) {
//add one for every destroyed item we find before the targetIndex in the target array
if (targetUnwrapped[i] && targetUnwrapped[i]._destroy) {
targetIndex++;
}
}
}
它在第三行中断,因为targetParent是一个Object,而不是一个函数。我该如何解决这个问题?
答案 0 :(得分:1)
更改targetUnwrapped = targetParent();
到
targetUnwrapped = ko.utils.unwrapObservable(targetParent);
答案 1 :(得分:0)
好的,谢谢到目前为止。 我的ViewModel包含一个函数,在每个drop上调用它。
self.dropCallback = function (arg) {
var item = arg.item;
var sourceParent = arg.sourceParent();
var targetParent = arg.targetParent();
blah(); //console.log("Moved '" + arg.item.name() + "' from " + arg.sourceParent.id + " (index: " + arg.sourceIndex + ") to " + arg.targetParent.id + " (index " + arg.targetIndex + ")");
};
变量sourceParent和targetParent现在表示用于foreach的Arrays。我怎么能再向另一位父母“走”一级呢?