所以我有两个viewModel,一个在observable中有一个文档样式数据库:
var databaseViewModel = function () {
var self = this;
self.database = ko.observableArray([]).publishesTo("database");
}
var calcViewModel = function () {
var self = this;
self.replicatedDatabase = ko.observableArray([]).subscribeTo("database");
}
这些因此得到应用:
ko.applyBindings({
databaseViewModel: new databaseViewModel(),
calcViewModel: new calcViewModel()
});
唯一的问题是,与replicatedDatabase
绑定的下拉框不会显示任何项目。我知道我可以强制进行绑定更新:
database.valueHasMutated();
但我不知道何时何地。
我在ko.applyBindings
之后尝试过但是,我不确定如何访问新创建的databaseViewModel
。我已经在databaseViewModel
创建了内部后尝试过,但我相信KO会在绑定时自动更新绑定,所以不确定这实际上是否有所作为,它没有在下拉列表中显示反正。
我不确定我应该在这做什么。
供参考,我使用knockout-postbox
进行消息总线式通信,subscribeTo
和publishesTo
。因此,只要database
observable被更改,它就会通知所有订阅者,因此我认为在replicatedDatabase
启动的实例中可能会更新databaseViewModel
。
答案 0 :(得分:0)
所以,不是强迫淘汰更新值,而是选择了不同的方法。
实际上,该页面最初将填充来自服务器的一些数据,因此我考虑到这一点,然后创建一个包含初始数据的全局变量:
var serverData = [{}];
然后只需使用Ryan Niemeyer映射函数填充observableArray
:
ko.observableArray.fn.map = function ( data, Constructor) {
var mapped = ko.utils.arrayMap(data, function (item) {
return new Constructor(item);
});
this(mapped);
return this;
};
这样两个viewModel
都从初始数据开始,当数据库viewModel
得到更新时,这会渗透到其他viewModel
&#39}