我正在尝试通过 AJAX 加载模型属性的值,但在 AJAX 完成时,视图不会更新。
我正在使用淘汰赛 2.0.0 和淘汰赛映射 2.0.3。
jsFiddle:
HTML:
<p>Code: <span data-bind="text: item.code"></span></p>
<p>Value: <span data-bind="text: item.value"></span></p>
JavaScript:
var ViewModel = function () {
var self = this;
self.item = ko.mapping.fromJS({ "code": "123" });
self.load = function () {
jQuery.ajax({
"success": function () {
ko.mapping.fromJS({ "value": "abc" }, {}, self.item);
},
"url": "/echo/json"
});
};
self.load();
};
ko.applyBindings(new ViewModel());
在此示例中,item.code
显示 的值是因为它是在初始化视图模型时定义的,但item.value
从未显示 的值,因为它是异步填充的。
我已经尝试了 and 的各种排列ko.observable
,ko.mapping.fromJS
用于属性初始化和更新,但无济于事。
我想避免 - 如果可能的话 -item
手动初始化所有的属性。
我也知道我可以在 AJAX 调用中移动ko.applyBindings
,success
但我有不止一个这样的属性,要做到这一点,我必须实现一个队列系统,这是一种矫枉过正的做法。
我究竟做错了什么?正确的做法是什么?