對於第一個問題,有一個稍微優化的方法,你可以做到這一點。 arg.sourceParent
包含在您要移除的tasksByRoute
項目中。函數remove
可以採用函數來針對項目運行。所以,你可以寫這樣的:
self.afterMoveCallback = function(arg) {
if (arg.sourceParent().length === 0) {
self.tasksByRoute.remove(function(route) {
return route.tasks === arg.sourceParent;
});
}
};
對於第二個問題,我真的很喜歡使用的擴展,它會自動跟蹤在observableArray的順序。它看起來是這樣的:
//track an index on items in an observableArray
ko.observableArray.fn.indexed = function(prop) {
prop = prop || 'index';
//whenever the array changes, make one loop to update the index on each
this.subscribe(function(newValue) {
if (newValue) {
var item;
for (var i = 0, j = newValue.length; i < j; i++) {
item = newValue[i];
if (!ko.isObservable(item[prop])) {
item[prop] = ko.observable();
}
item[prop](i); //add 1 here if you don't want it to be zero based
}
}
});
//initialize the index
this.valueHasMutated();
return this;
};
你的情況,你會使用它想:
self.scheduledTasks = ko.observableArray([
new Task(8, 4, "Route 4", "Cust 8", 1),
new Task(9, 4, "Route 4", "Cust 9", 2),
new Task(10, 5, "Route 5", "Cust 10")
]).indexed("order");
這裏是與這兩個變化的更新的樣本:http://jsfiddle.net/rniemeyer/usVKQ/
偉大的答案。我知道必須有更好的方法來解決第一個問題。我知道可觀察陣列與排序匹配。這對我來說很神奇,但太棒了。感謝您的幫助。非常感謝。 – TheGwa