したがって、次のように、KnockoutJS を使用して複数のビュー モデルを操作しています。
function firstViewModel() {
var self = this;
self.dataArray = ko.observableArray([
{ title: "title1", theData: "data1" },
{ title: "title2", theData: "data2" },
{ title: "title3", theData: "data3" },
]);
};
function secondViewModel() {
var self = this;
self.addData = function() {
firstViewModel.dataArray.push({ title: "newTitle", theData: "newData" });
// trying to trigger dataArray in firstViewModel, doesn't work
}
};
ko.applyBindings(new firstViewModel(), document.getElementById('first'));
ko.applyBindings(new secondViewModel(), document.getElementById('second'));
次に、次のようなもの:
<div id="first" data-bind="with: dataArray">
<ul data-bind="foreach: $data">
<li data-bind="text: theData"></li>
</ul>
</div>
<div id="second">
<button data-bind="click: addData">add</button>
</div>
このように構成されている理由は、3 番目のビュー モデルがあり、要素が DOM で重複しているためです。これを機能させる方法もわかりませんでした。
構造を保持し、firstViewModel を secondViewModel 内で参照する方法はありますか? firstViewModel.theData.push("newData"); 明らかに機能しませんが、何をしようとしているのかをさらに明確にするために含めると思いました。
私は KO の初心者です - ばかげた質問でしたら申し訳ありません。
編集:私はそれを手に入れたようです!
firstViewModel から「self」を削除すると動作します...
dataArray = ko.observableArray([
{ title: "title1", theData: "data1" },
{ title: "title2", theData: "data2" }
]);
それから
self.addData = function() {
dataArray.push({ title: "newTitle", theData: "newData" });
}
「自己」を削除することの結果があるかどうかはまだわかりませんが、これまでのところ機能しています。