我得到的错误,当ko.mapping
更新我的模型,其中有一些订阅。一旦订阅被删除,一切就像魅力一样。任何想法如何使其工作?ko.mapping:与订阅更新模型
考虑这个例子(jsfiddle available) - 呼吁ko.mapping.fromJS()
在initModel()
触发错误:
var iniData = {
FirstName: "foo",
LastName: "bar"
};
var PersonModel = function() {
this.FirstName = ko.observable("");
this.LastName = ko.observable("");
this.FullName = ko.observable("");
// If you comment out subscribe() calls, everything works fine!
this.FirstName.subscribe(this.updateFullName);
this.LastName.subscribe(this.updateFullName);
// Update FullName only if it's empty
this.updateFullName = function(){
if (!this.FullName()) {
this.FullName(
this.LastName() +
this.FirstName() ? (
" " + this.FirstName()
):''
);
}
};
this.initModel = function(){
try {
ko.mapping.fromJS(iniData, {}, this);
}
catch(err) {
alert(err.message);
}
}
}
ko.applyBindings(new PersonModel());
你明白了!当然我应该在提到它之前宣布更新函数。 – 2013-04-25 17:37:45
对了,还要看看我的小提琴,你应该始终声明另一个变量引用您的视图模型,如“自我”。因为“this”可能并不总是指向你的视图模型。见http://joshuakehn.com/2011/10/20/Understanding-JavaScript-Context.html – Jalayn 2013-04-25 17:42:28
确实使用'self'更安全。另一个选择是提供'this'值作为'subscribe'的第二个参数,就像在http://jsfiddle.net/y48U2/3/ – 2013-04-25 18:37:50