所以我正在使用 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>
它的结构是这样的原因是因为我有一个第三视图模型,并且元素在 DOM 中重叠。我也不知道如何让它工作。
有没有办法将结构和引用 firstViewModel 保留在 secondViewModel 中?firstViewModel.theData.push("newData"); 显然不起作用,但我想我会把它包括在内以进一步阐明我想要做什么。
我是 KO 的新手——如果这是一个愚蠢的问题,我很抱歉。
编辑:看起来我明白了!
如果我从 firstViewModel 中删除“自我”,它会起作用......
dataArray = ko.observableArray([
{ title: "title1", theData: "data1" },
{ title: "title2", theData: "data2" }
]);
然后
self.addData = function() {
dataArray.push({ title: "newTitle", theData: "newData" });
}
我还不知道删除“自我”是否会产生后果,但到目前为止它正在发挥作用。