javascript - 访问家长的成员(member)

标签 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().

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

最佳答案

您需要将每个上下文中的 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 + "%";
   });
}

关于javascript - 访问家长的成员(member),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41339078/

相关文章:

javascript - Knockout.js 将 observable 与单个 json 对象绑定(bind)

javascript - 初始化空表单中断页面; knockout

javascript - Instagram oAuth Authentication postMessage 问题仅适用于移动浏览器

javascript - 为什么不 moveTo(0, 0); lineTo(X, X);画一条45°线?

javascript - 如何使用数据通过ajax加载 View

javascript - knockout : How to do a two-way binding for two number inputs

javascript - 有没有办法在 knockoutjs 中扩展现有的 View 模型?

javascript - 如何定义 Webpack "global module"来保存我的 Knockout View 模型?

javascript - 点亮元素 typescript 项目全局接口(interface)声明有必要吗?

javascript - 如何过滤从对象的属性数组中排除的数组