1

グリッドからレコードを追加/ロードし、グリッドの外側で編集して、observablearray と UI を更新しようとしています。

デモ: http://jsfiddle.net/DiegoVieira/ckMJE/98/

お気づきのとおり、追加または編集は期待どおりに機能しません。新しいアイテムを追加すると、配列に追加され、UI が反映されますが、次に別のアイテムを追加すると、古いアイテムが追加されます。

データはサーバーから取得され、30 以上のプロパティがあるため、各プロパティが ko.observable であるオブジェクトを構築することはできません。

例えば

    $.get('api/objects', function (data) {
        self.stones(data.stones); // when the vm loads, this is empty
        self.stone(data.stone); // when the vm loads, this is empty
    });

前もって感謝します。

4

1 に答える 1

1

一般に、プロパティを監視可能にする必要があります。

これが不可能な場合、実際に再レンダリングされるように、アイテムを削除して配列に追加し直すことが 1 つのオプションです。

「テンプレート」ストーンを追加するときは、それをコピーしたいと思うでしょう。ko.toJSコピーを取得する簡単な方法です。

したがって、次のようなことができます。

self.addStone = function () {
    self.stonesArray.push(ko.toJS(self.stoneData));  
};

次のように保存します。

self.saveStone = function (item) {
    var index = self.stonesArray.indexOf(item);
    self.stonesArray.remove(item);
    self.stonesArray.splice(index, 0, item);
    self.selectedStone(null);
};

サンプル: http://jsfiddle.net/rniemeyer/ckMJE/99/

于 2012-11-27T02:52:57.500 に答える