Knockout在ko.mapping.fromJS之后找不到ViewModel属性



所以我有一个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。

最新更新