是否將markAllCompleted實現爲一個計算目的?看起來複選框檢查綁定應該是一個函數,並且addItem中的用法應該是一個常規可觀察的。爲什麼markAllCompleted是Breeze TODO樣本中的「計算」?
真的好奇。對於Breeze和Knockout,我仍然相當不討厭......事實上,也許這是一個比微風問題更多的淘汰問題...
(僅供參考,我已在下面列出相關代碼)
當我覺得答案應該是顯而易見的時候,我討厭提問,但事實並非如此。我無法抗拒。
謝謝!
function addItem() {
var item = dataservice.createTodo();
item.IsDone(vm.markAllCompleted());
item.Description(vm.newTodo());
item.CreatedAt(new Date());
if (item.entityAspect.validateEntity()) {
extendItem(item);
vm.items.push(item);
dataservice.saveChanges();
vm.newTodo("");
} else {
handleItemErrors(item);
}
}
vm.markAllCompleted = ko.computed({
read: function() {
var state = getStateOfItems();
return state.itemsLeftCount === 0 && vm.items().length > 0;
},
write: function (value) {
suspendItemSave = true;
vm.items().forEach(function (item) {
item.IsDone(value);
});
suspendItemSave = false;
dataservice.saveChanges();
}
<input id="markAll" type="checkbox" data-bind="checked: markAllCompleted">
很好的解釋...和反饋。可以爭取整個名稱:) – Ward
我也發現這些信息是有用的,當試圖瞭解這個問題的答案:http://knockoutjs.com/documentation/computedObservables.html#writeable_computed_observables –