2014-10-03 41 views
0

请到通过链接:http://jsfiddle.net/nn0mfe48/1/Knockout:如何将模型传递给JavaScript对象字面值?

在这里,我能够使用淘汰赛WITH当我使用对象文字的绑定,但是当我改变它的功能相同的代码无法正常工作。

作品:

var profileModel = { 
    first: ko.observable("Bob"), 
    last: ko.observable("Smith"), 
}; 

不起作用:

var profileModel = function() { 
    this.firstname= ko.observable("Bob"); 
    last: ko.observable("Smith"); 
}; 

什么我需要在代码更改,使其工作。 我需要的小时是将knockout viewmodel对象传递给viewmodel并动态绑定值而不是硬编码值。

我已经通过链接了:Difference between knockout View Models declared as object literals vs functions

但不明白怎么能利用我的情况。希望我解释清楚,可以理解。在这方面的任何帮助表示赞赏。提前感谢。

+0

Javascript 101 ...这与淘汰赛无关。首先学习JavaScript语法。 – 2014-10-04 04:59:12

回答

2

您的问题中的代码是混合对象文字语法w /变量赋值语法。此外,在该功能中,您应该将this分配给self/that变量以缓解范围问题。这也使得使用ko.computed()好很多。结合之前

var profileModel = function() { 
    this.firstname = ko.observable("Bob"); 
    this.lastname = ko.observable("Smith"); 
}; 

确保您创建一个新实例它

var profileMod = function() { 
    var self = this; 
    self.first = ko.observable("Bob"); 
    self.last = ko.observable("Smith"); 
    } 

我已经更新了你的提琴http://jsfiddle.net/nn0mfe48/3/

+0

谢谢Stephen,它工作。 :),但在控制台中出现如下错误:referenceError:Unable to process binding“with:function(){return shell}” 消息:无法处理绑定“:function(){return $ root.profile}”。即使在这个错误之后,它也会绑定数据。 – ravibhat 2014-10-03 19:58:37

+0

这是因为我在我的定义中忽略了选定的选项。 http://jsfiddle.net/nn0mfe48/4/ – Stephen 2014-10-03 20:04:01

+0

雅,回复后发现它。感谢队友,感谢您的即时回复。 – ravibhat 2014-10-03 20:08:39

1

一旦你创建你的观点正确的模型

var vm = new profileModel(); 

and bind

ko.applyBindings(vm); 

另外,要小心你使用with结合的。您已在shell模型的周围创建了一个上下文,这会迫使您使用$root访问您的profile视图模型。

+0

谢谢队友。 :) – ravibhat 2014-10-03 20:03:57

+0

不客气。可以说,尽管如此,所有模型都应该以这种方式构建,而不是作为对象文字。您可以编写或汇总所需的所有模型,但应该一致地定义它们。如果你希望事件冒泡,你也可以在'ko.observable'中包装其他模型的实例(例如'this.profile = ko.observable(new profileModel());')。 – 2014-10-03 20:09:00

相关问题