我有一个ViewModel,它是一个可观察的对象数组,用于保存我将使用foreach
输出的联系人信息。我需要有一个依赖于每个联系人的firstName
和lastName
的计算可观察量:
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()的引用失败了吗?感谢。
答案 0 :(得分:1)
问题是您的联系人定义中的this
并未引用联系人本身;它指的是全球对象。使用函数(“经典”构造函数或只是创建对象文字并返回它的函数)来创建联系人,以便它可以正确设置其上下文。