Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Knockout.js 如何在模态对话框中编辑剔除视图模型_Knockout.js - Fatal编程技术网

Knockout.js 如何在模态对话框中编辑剔除视图模型

Knockout.js 如何在模态对话框中编辑剔除视图模型,knockout.js,Knockout.js,我正在使用knockout.js构建一个向导式的界面,最后一个阶段允许用户查看他们输入的信息。有一些链接可以打开一个模式对话框,其中部分信息可以编辑 我将如何处理我的淘汰ViewModel的更新,以使主ViewModel对象仅在对话框“接受”时更新?注;如果用户取消该对话框,则原始ViewModel应保持不变。如果您只是在寻找通用解决方案,那么它非常简单 //main Viewmodel self.openDialog = function() { var copy = //copy

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


我将如何处理我的淘汰ViewModel的更新,以使主ViewModel对象仅在对话框“接受”时更新?注;如果用户取消该对话框,则原始ViewModel应保持不变。

如果您只是在寻找通用解决方案,那么它非常简单

//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 super-mega-awesome复制函数:
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));

现在你有了一份完整的副本。

你有没有可以发布的代码?你要求的太多了,但没有给我们太多的东西。你的页面上有下划线或jQuery吗(它们的util函数在这里会很有用)?@Tyrsius-我有很多javascript/html要发布在这里。我只是想得到一个非常通用的方法来解决这个问题。@FakeRainBrigand-我目前正在使用jQuery和jQuery简单模式。谢谢。我想问的问题是,如何最好地处理viewmodel对象的复制(很抱歉没有更好地阐明这一点),这是唯一的选择,只是编写一个方法来复制对象的每个成员?这个答案描述了另一种方式,但它仍然归结为最终必须复制每个成员,如果可能的话,我希望避免这样做。