出于示例目的,markAllCompleted 是否实现为计算?看起来复选框检查绑定应该是一个函数,并且 addItem 中的用法应该是一个常规的 observable。
只是真的很好奇。当谈到 Breeze 和 Knockout 时,我仍然相当笨拙......事实上,也许这是一个 Knockout 问题而不是 Breeze 问题......
(作为参考,我在下面包含了相关代码)
当我觉得答案应该很明显时,我讨厌问问题,但事实并非如此。我忍不住问道。
谢谢!
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">