Javascript knockoutjs-可观测数组中的计算可观测值
我有一个ViewModel,它是一个可观察的对象数组,保存联系人的信息,我将使用Javascript knockoutjs-可观测数组中的计算可观测值,javascript,knockout.js,Javascript,Knockout.js,我有一个ViewModel,它是一个可观察的对象数组,保存联系人的信息,我将使用foreach输出这些信息。我需要根据每个联系人的firstName和lastName计算观察值: var contacts = ko.observableArray([ { firstName: ko.observable("Jim"), lastName: ko.observable("Carrey"), fullName: ko.computed(fu
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);
但是我得到了这个错误
未捕获的TypeError:Object没有方法“firstName”
。有人能解释为什么我对这个.firstName()的引用失败了吗?谢谢。问题在于,您的联系人定义中的此
并不是指联系人本身;它指的是全局对象。使用一个函数(要么是“经典”构造函数,要么只是一个创建对象文本并返回它的函数)来创建联系人,以便它可以正确设置其上下文。有没有理由在obs数组中使用计算函数?我正在构建一个名和姓氏可编辑的应用程序,因此,他们必须更新用户界面以反映变化。我也不是淘汰赛专家。但是您可以删除obs数组中的计算函数,并使用单独的计算函数吗。我创造了小提琴,但不知何故却出错了。如果您可以修复,那么应该对您有用。我可以请求downvoter在downvoting问题时添加注释吗。我不明白的是,为什么此
未指向当前对象?有没有我可以阅读的文档?你可以尝试这样说:“当一个函数作为一个对象的方法被调用时,它的this被设置为该方法被调用的对象。”。这是否意味着如果我调用ko.computed时没有第二个参数,比如fullName:ko.computed(函数(){return this.firstName()+“”+this.lastName();}),
那么这个
将引用我的联系人对象?