2016-12-27 49 views
0

考虑下面的代码:访问家长的成员

  self.pcsList = ko.observableArray(ko.utils.arrayMap(pcs, function (pc) { 
       return { 
        obCurHp: ko.observable(pc.curHp), obMaxHp: ko.observable(pc.hp), 
        obHpPerc: ko.computed(function(){return Math.round(this.obCurHp()/this.obMaxHp())*100 + "%";}) 
       }; 
      })); 

obHpPrec不评价任何东西,因为无论this.obCurHp() & this.obMaxHp()是一个东西也不是obCurHp() & obMaxHp()

我需要访问当前pcsList对象的这些成员,所以我可以构造计算对象。我会如何去做这件事?

回答

2

你需要在每个上下文中分开保存this。你可以有一个子模型,并为每个元素创建一个新的实例。

var mainViewModel = function(){ 
    var self = this; 
    self.pcsList = ko.observableArray(ko.utils.arrayMap(pcs, function (pc) { 
     return new pcListItemViewModel(pc); 
    })); 
} 
var pcListItemViewModel = function (pc){ 
    var self = this; 
    self.obCurHp = ko.observable(pc.curHp); 
    self.obMaxHp = ko.observable(pc.hp); 
    self.obHpPerc = ko.computed(function(){ 
     return Math.round(self.obCurHp()/self.obMaxHp())*100 + "%"; 
    }); 
} 
+0

决定我不需要'obHpPrec'是一个可计算的观察值,所以我只是做了另一个函数。由于我的'obCurHp'和'obMaxHp'是可观察的,函数更新百分比就好了。虽然这是一件值得记住的好事,谢谢! –