如何从app.showdialog传递信息

时间:2015-02-02 11:20:53

标签: viewmodel durandal showdialog

来自我的一个名为" 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;
}
);

此视图模型的视图" main"如下所示将调用另一个视图

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

现在我想从viewModel传递信息&#34; carData&#34; to&#34; carInfo&#34;视图模型。 我怎么能这样做?

2 个答案:

答案 0 :(得分:0)

不了解有关您的应用程序结构的更多信息,很难提供任何有意义的解决方案。但是,我建议使用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
});

答案 1 :(得分:0)

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

例如:

function mulTable(){
        window.alert("hello!");
        document.write("<table style='border-width:2px;border-color: blue; border-style: solid;'>");
        var trs=parseInt(window.prompt("How many rows:",""));
        var tds=parseInt(window.prompt("How many cols:",""));
        var i=1, j=1;
        while(trs>=i){
        document.write("<tr style='border-width:2px; border-style: solid;'>");
        while(tds>=j){
           document.write("<td style='width:30px;background-color:yellow;text-align:center;'>"+i*j+"</td>");

           j++;
        }
        j=1;
        document.write("</tr>");
        i++;
        }
            document.write("</table>");
        }