所以我有一个ajax调用,在这个场景中,我能够正确地绑定Health
var viewModel = function () {
var self = this;
self.Health = ko.observable();
self.Load = function(data) {
self.Health(data.Health);
};
self.LoadFromServer = function () {
$.getJSON("@Url.Action("Details", "Person", new {id = Model.ID})", null, function (jsonData) {
self.Load(jsonData);
});
};
但为了避免手动创建数据中的每个属性,我尝试像一样使用ko.mapping.fromJS
var viewModel = function () {
var self = this;
self.Load = function(data) {
ko.mapping.fromJS(data, {}, self)
};
self.LoadFromServer = function () {
$.getJSON("@Url.Action("Details", "Person", new {id = Model.ID})", null, function (jsonData) {
self.Load(jsonData);
});
};
只在我的绑定中发现javascript错误"Health is not defined"
<span data-bind="text: Health"></span>
任何帮助都将不胜感激。
链接到这个破碎场景的JSFiddlehttp://jsfiddle.net/rpuri/LskVR/
感谢SO。
在Ajax成功事件中,我能够使用jQuery.extend 向视图模型动态添加属性
.done(function (raw) {
$.extend(self, ko.mapping.fromJS(raw));
ko.applyBindings(self);
});
异步调用完成后,还需要在.done()事件中调用ko.applyBindings(self)。
我现在面临的问题是每次加载新数据时都必须调用ko.applyBindings(self)和$.extend。
下面是一个工作示例。第22行;23是性能问题。
http://jsfiddle.net/rpuri/ANgJb/
有没有办法在绑定和扩展之前进行检查,以避免每次调用?
感谢SO。