淘汰赛:如何将模型传递给j​​avascript对象文字?

时间:2014-10-03 19:28:46

标签: javascript jquery knockout.js

请浏览链接:http://jsfiddle.net/nn0mfe48/1/

这里我可以在使用对象文字时使用knockout WITH binding,但是当我将其更改为函数时,相同的代码不起作用。

作品:

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

但无法理解如何在我的案例中使用。 希望我解释清楚,可以理解。在这方面的任何帮助表示赞赏。谢谢。

2 个答案:

答案 0 :(得分:2)

您的问题中的代码是混合具有变量赋值语法的对象文字语法。此外,在该功能中,您应该将this分配给self / that变量以缓解范围问题。它还使得使用ko.computed()更好。

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

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

答案 1 :(得分:1)

正确创建视图模型后:

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

确保在绑定之前创建新实例

var vm = new profileModel();

并绑定

ko.applyBindings(vm);

另外,请谨慎使用with绑定。您已在shell模型周围创建了一个上下文,强制您使用$root访问profile视图模型。