访问父母的成员

时间:2016-12-27 04:40:19

标签: javascript knockout.js

给出以下代码:

            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() disable-output-escaping

我需要访问当前pcsList对象的这些成员,以便构造计算对象。我该怎么做呢?

1 个答案:

答案 0 :(得分: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 + "%";
   });
}