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

时间:2013-11-23 22:59:26

标签: knockout.js

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

非常感谢。

1 个答案:

答案 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/

有没有办法在绑定和扩展之前检查以避免每次调用?

非常感谢。