从另一个视图模型更新Knockout Observable Array

时间:2016-09-28 09:10:29

标签: javascript mvvm knockout.js

这似乎是一个复杂的场景。但我会试着简单地解释它。

在viewmodel中,我有一个绑定到下拉列表的Observable Array。

(function () {
    UserMgmt.PeopleViewModel = WebFramework.BaseViewModel.inherits({

    initializeViewModel: function (options) {
        this.initializeBinding(options);
    },
    initializeBinding: function (options) {
        .......
        .......
        this.intGroups = ko.observableArray([]);
        .......
        getGroupsForSite: function (cb) {
            this.setListValue('/GetGroupsForSite', { siteId: '123', startIndex: 0, maxRecordCount: 20 }, this.intGroups, cb);
        },
        setListValue: function (api, data, observable, cb) {
            this.postDataRequest(api, data, function (err, result) { //Gets teh data from service
                if (!err && result) {
                    observable(result.data);
                    if (cb) { cb(); }
                }
            });
        },
    ....
)},

现在,从此页面打开一个具有不同viewmodel的弹出窗口,您可以在那里保存新的组信息。

但在关闭模态弹出窗口时,该上一页的dropdown value needs to updated with this saved value

我可以通过observableArray吗?

那么,我可以从这个新的viewmodel更新而不重新加载整个上一页,它只更新下拉列表?

这是第二个视图模型......

   UserMgmt.IntrusionGroupListViewModel = WebFramework.BaseViewModel.inherits({
    initializeViewModel: function (options) {
        this.initializeBinding(options);
    },
    initializeBinding: function (options) {
        this.ErrorMessage = ko.observable("");
        this.IsError = ko.observable(false);


        SaveNewGroup: function () {

            debugger;
            //this.setListValue('/GetGroupsForSite', { siteId: '123', startIndex: 0, maxRecordCount: 20 }, this.intGroups, cb);
        }
}

如何实现所需的功能?

SaveNewGroup()内应该有什么用?

1 个答案:

答案 0 :(得分:0)

实例化两个视图模型的代码应该将第一个viewmodel或其intGroups成员作为options之一传递给第二个viewmodel。然后,第二个视图模型可以访问它所需的内容。您可以修改可观察数组,更改将显示在视图中。

如果由于某种原因,没有代码知道两个视图模型,则需要使用Postbox在两者之间进行通信。