2013-03-24 30 views
0

我试图使用映射插件,使儿童对象的属性可观察。我有以下几点:对象未定义与Knockout数据映射插件

// setData defined here 

var mapping = { 

    create: function(options) { 
     //customize at the root level. 
     var innerModel = ko.mapping.fromJS(options.data); 
     innerModel.cardCount = ko.computed(function() { 
      debugger; 
      return this.cards().length; // cards not defined - "this" is Window for some reason 
     }); 

     innerModel.deleteCard = function (card) { 
      // Pending UI 
      // call API here 
      // On success, complete 
      this.cards.remove(card); 
     }.bind(this); 

     innerModel.addCard = function() { 
      //debugger; 
      // Pending UI 
      // Call API here 
      // On success, complete 
      this.cards.push(dummyCard); 
      //this.cardToAdd(""); 
     }.bind(this); 

     return innerModel; 
    } 
}; 

var SetViewModel = ko.mapping.fromJS(setData, mapping); 

ko.applyBindings(SetViewModel); 

当我在Chrome调试器中运行,我得到“对象[对象全局]有没有方法卡”。卡是一个可观察的数组。我究竟做错了什么?

回答

1
innerModel.cardCount = ko.computed(function() { 
      debugger; 
      return this.cards().length; // cards not defined - "this" is Window for some reason 
     }); 

this是你创建,并因此被绑定到全局对象匿名函数内部。如果你想引用innermodel,你必须直接这样做,或者将innermodel绑定到函数。

innerModel.cardCount = ko.computed(function() { 
      return innerModel.cards().length; 
     }); 

var computedFunction = function() { 
      return this.cards().length; 
     }; 
innerModel.cardCount = ko.computed(computedFunction.apply(innerModel)); 
+0

感谢本,帮助很大。 – JakeP 2013-03-24 03:49:55