我正在尝试做一个相当简单的部分更新。我使用具有自己的子属性“lastName”的对象更新了视图模型的属性“person”,该属性最初为 null。尝试通知订阅者时,这会失败并显示“没有方法 person.lastName()”。
小提琴演示问题:http: //jsfiddle.net/P4Jd3/4/
HTML
<body>
<hr/>
<div data-bind="text: rootdata"></div>
<hr/>
<div data-bind="if: person">
<div data-bind="text: person.lastName()?person.lastName()+'###':'foo'">
</div>
</div>
<hr/>
<input type="submit" data-bind="click: updatedata" value="update data"></input>
</body>
JS:
newdata = {
person: {
lastName: "Mr.Bar"
},
rootdata : "Root 2"
}
model = {
self: this,
person : ko.observable(null),
rootdata : ko.observable("Init root"),
updatedata: function() {
ko.mapping.fromJS(newdata, {}, model);
}
}
ko.applyBindings(model);
在更新时,我收到一条错误消息,指出对象函数 [ko observable junk string] 没有方法 lastName()。
Message: TypeError: Object function d(){if(0<arguments.length){if(!d.equalityComparer||!d.equalityComparer(c,arguments[0]))d.H(),c=arguments[0],d.G();return this}b.r.Wa(d);return c} has no method 'lastName';
Bindings value: text: person.lastName()?person.lastName()+'###':'foo'
需要 person.lastName()+"##" 将属性值与可选的文本格式相结合,具体取决于某些属性是否为非空。
我对这个没有想法。