首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >强制KO自动更新

强制KO自动更新
EN

Stack Overflow用户
提问于 2014-06-21 23:04:47
回答 1查看 81关注 0票数 1

所以我有两个viewModels,一个在一个可观察到的文档样式数据库中:

代码语言:javascript
复制
var databaseViewModel = function () {
    var self = this;
    self.database = ko.observableArray([]).publishesTo("database");
}

var calcViewModel = function () {
    var self = this;

    self.replicatedDatabase = ko.observableArray([]).subscribeTo("database");
}

这些都得到了如此的应用:

代码语言:javascript
复制
ko.applyBindings({
    databaseViewModel: new databaseViewModel(),
    calcViewModel: new calcViewModel()
});

唯一的问题是,绑定到replicatedDatabase的下拉框没有显示任何项目。我知道我可以强制进行绑定更新:

代码语言:javascript
复制
database.valueHasMutated();

但我不知道何时何地。

但是,在ko.applyBindings之后,我不知道如何访问新创建的databaseViewModel。在创建databaseViewModel之后,我尝试过在它内部进行操作,但是我相信KO在绑定之后会自动更新绑定,所以不确定这是否真的有什么区别,它也不会在下拉列表上起作用。

我不太确定我应该在这里做什么。

作为参考,我正在使用knockout-postbox进行消息总线风格的通信,subscribeTopublishesTo。因此,一旦可观察到的database被更改,它就会通知所有订阅者,所以我想,在启动databaseViewModel的实例中,replicatedDatabase可能已经被更新了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-25 10:51:39

所以,我选择了一种不同的方法,而不是强迫敲除来更新值。

实际上,该页面最初将使用来自服务器的一些数据填充,因此,考虑到这一点,我首先使用一个全局变量来保存初始数据:

代码语言:javascript
复制
var serverData = [{}];

然后,只需使用Ryan映射函数来填充observableArray

代码语言:javascript
复制
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中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24346649

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档