私の実際のプロジェクトに基づいて、このテストコードを使用します。
var test = ko.mapping.fromJS({ id: 1, kids: [{ name: "sue"}] });
test.kids.push({ name: "tim" });
test.kids.push(ko.mapping.fromJS({ name: "joe" }));
console.log(test);
console.log(test.kids()[0]);
console.log(test.kids()[1]);
console.log(test.kids()[2]);
test.kids()[2].__ko_mapping__ = undefined;
console.log(test.kids()[2]);
Firebug のコンソール出力には次のように表示されます。
Object { __ko-mapping__={...}, id=d(), kids=d() }
Object { name=d() }
Object { name="tim" }
Object { __ko-mapping__={...}, name=d() }
Object { name=d() }
私の目標はkids
、データの最初のマッピング後に配列に項目を追加し、それらの項目を追加された元の項目と同じに見せることです。配列にオブジェクトを直接プッシュするだけでは、プロパティは観察可能ではありません。を使用してオブジェクトをプッシュするko.mapping.fromJS
と、余分な__ko_mapping__
オブジェクトが含まれます。余分なオブジェクトは必要ないように思われるため (元のアイテムにはそれがなく、正常に動作します)、後で何千ものアイテムを追加する場所でこの同じデザインを使用する可能性があるため、追加のオブジェクトを使用したくありません。
オブジェクトを に設定undefined
すると、余分なオブジェクトが削除されるように見えますが、可能であれば最初から作成したくないでしょう。