给出以下代码:
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对象的这些成员,以便构造计算对象。我该怎么做呢?
答案 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 + "%";
});
}