如何在模态对话框中处理编辑敲除ViewModel

时间:2013-07-25 22:03:36

标签: knockout.js

我正在使用knockout.js构建一个向导式界面,其中最后一个阶段允许用户查看他们输入的信息。有一些链接打开一个模态对话框,可以编辑部分信息。

我如何处理我的淘汰ViewModel的更新,以便只有当对话框被'接受'时,主ViewModel对象才会更新?注意;如果用户取消对话框,则原始ViewModel应保持不变。

1 个答案:

答案 0 :(得分:3)

如果您只是寻找一般解决方案,那么它非常简单。

//main Viewmodel

self.openDialog = function() {
    var copy = //copy wizard with preferred method
    self.dialogItem(copy);
    self.isShowingDialog(true); 
};

self.acceptDialog = function() {
    self.isShowingDialog(false);
    var result = //copy self.dialogItem with preferred method
    self.wizard(result);
};

更新

我更喜欢使用Knockouts超级超级棒的复制功能:ko.toJS(viewmodel)。它通过展开所有可观察对象来创建对象的副本,因此您有一个普通对象。如果构造函数将对象作为参数,则可以使用此对象构建新副本。它可能看起来像这样

var Wizard = function(data) {
    var self = this;
    self.id = ko.observable(data.id || 0);
    self.name = ko.observable(data.name || '');
    self.otherThing = ko.observable(data.otherThing || '');
};

...

var copy = new Wizard(ko.toJS(original));

现在你有一份可靠的副本。