0

markAllCompletedは、例として計算されたものとして実装されていますか?チェックボックスがオンになっているバインディングは関数である必要があり、addItemでの使用法は通常の監視対象である必要があるようです。

本当に興味があります。BreezeとKnockoutに関しては、まだかなりおとなしいです...実際、これは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">
4

1 に答える 1

3

ここでの混乱は、主に計算値の不適切な命名が原因だと思いますmarkAllCompleted。説明した別の方法(クリックを関数にバインドする)は、チェックボックス(独自のtrueまたはfalseの状態を持つ)ではなく、ボタン(ステートレス)に関連します。

この計算された(おそらく)より適切な名前は、のようなものになりますallItemsDone。より単純な実装では、この値に書き込むことはできません(つまり、単純な読み取り専用の計算であり、ビューでは読み取り専用のチェックボックスまたは同等のものになります)。ただし、デモの実装にはこの機能があるため(ユーザーがマスターのチェックボックスをオン/オフにできるようにするため)、計算には書き込み関数も必要ですが、単純な読み取り専用ではなく、計算されたままにすることができます。

于 2013-01-16T00:26:08.673 に答える