所以我有一个ajax调用,在这种情况下我能够正确绑定健康
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错误'未定义健康'
<span data-bind="text: Health"></span>
非常感谢任何帮助。
使用这个破碎的场景链接到JSFiddle http://jsfiddle.net/rpuri/LskVR/
非常感谢。
答案 0 :(得分:0)
我能够使用jQuery.extend在Ajax成功事件中为我的View Model动态添加属性
.done(function (raw) {
$.extend(self, ko.mapping.fromJS(raw));
ko.applyBindings(self);
});
在异步调用完成后,还必须在.done()事件中调用ko.applyBindings(self)。
我现在面临的问题是每次加载新数据时都必须调用ko.applyBindings(self)和$ .extend。
这是一个工作示例。第22行和第22行23是性能问题。
http://jsfiddle.net/rpuri/ANgJb/
有没有办法在绑定和扩展之前检查以避免每次调用?
非常感谢。