【问题标题】:How to pass information from app.showdialog如何从 app.showdialog 传递信息
【发布时间】:2015-02-02 11:20:53
【问题描述】:

从我的一个名为“carData”的视图模型中,我打开如下所示的弹出窗口

app.showDialog('viewmodels/task/main', "222").then(function () {
}

现在它打开名为“main”的视图模型,其中包含用于打开对话的代码

define(['plugins/dialog'],


function (dialog) {

    var ctor = function () {
    };

    ctor.prototype.activate = function (data) {

        var self = this;

        this.close = function () {
            dialog.close(self, "Cancel");
        };


    };

    return ctor;
}
);

这个视图模型“主”的视图如下,它将调用另一个视图

 <div data-bind="compose:'viewmodels/task/carInfo'"></div>

现在我想将信息从视图模型“carData”传递到“carInfo”视图模型。 我该怎么做?

【问题讨论】:

    标签: viewmodel durandal showdialog


    【解决方案1】:

    不了解有关应用程序结构的更多信息,很难提供任何有意义的解决方案。不过,我建议使用 application-wide messaging 在视图模型之间进行通信。

    为此,我们将方法关闭对话框更改为

    this.close = function () {
            app.trigger('dialog:closed', DATA_TO_SEND);
            dialog.close(self, "Cancel");
        };
    

    现在在“carInfo”视图模型中,您可以订阅这样的消息并在收到消息时执行一些操作。

    app.on('dialog:closed').then(function(data){
        //do something with the received data
    });
    

    【讨论】:

    • 您正在关闭函数中传递触发器。如果对话框关闭有什么用?
    【解决方案2】:

    使用回调从对话框中传递信息。

    例如:

    app.showDialog('viewmodels/task/main', "222").then(function (action, model) {
    if (action == "save") {
     // save content from dialog
    }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-16
      • 2011-01-16
      相关资源
      最近更新 更多