knockoutjs - 在可观察数组中计算的observable

时间:2014-01-21 22:52:42

标签: javascript knockout.js

我有一个ViewModel,它是一个可观察的对象数组,用于保存我将使用foreach输出的联系人信息。我需要有一个依赖于每个联系人的firstNamelastName的计算可观察量:

var contacts = ko.observableArray([
    {
        firstName: ko.observable("Jim"),
        lastName:  ko.observable("Carrey"),
        fullName:  ko.computed(function(){
            return this.firstName() + " " + this.lastName();
        }, this),
        image:     ko.observable("images/jim.jpg"),
        phones:    ko.observableArray([
            {type: ko.observable("Mobile"), number: ko.observable("(555) 121-2121")},
            {type: ko.observable("Home"), number: ko.observable("(555) 123-4567")}
        ])
    },
    ...//other objects of the same structure
]);
ko.applyBindings(contacts);

但我收到此错误Uncaught TypeError: Object #<HTMLDocument> has no method 'firstName'。有人可以解释为什么我对this.firstName()的引用失败了吗?感谢。

1 个答案:

答案 0 :(得分:1)

问题是您的联系人定义中的this并未引用联系人本身;它指的是全球对象。使用函数(“经典”构造函数或只是创建对象文字并返回它的函数)来创建联系人,以便它可以正确设置其上下文。