所以我有两个viewModels,一个在一个可观察到的文档样式数据库中:
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被更改,它就会通知所有订阅者,所以我想,在启动databaseViewModel的实例中,replicatedDatabase可能已经被更新了。
发布于 2014-06-25 10:51:39
所以,我选择了一种不同的方法,而不是强迫敲除来更新值。
实际上,该页面最初将使用来自服务器的一些数据填充,因此,考虑到这一点,我首先使用一个全局变量来保存初始数据:
var serverData = [{}];然后,只需使用Ryan映射函数来填充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中。
https://stackoverflow.com/questions/24346649
复制相似问题