2016-12-27 6 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 + "%";}) 
       }; 
      })); 

this.obCurHp() & this.obMaxHp()もないのでobHpPrecが何に評価されない事ですも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'はオブザーバブルなので、関数はパーセンテージをうまく更新します。おかげさまで、これは良いことですが! –

関連する問題