我可以(如果是的话)如何从这样的ko.observable
中创建object.defineproperty
Strength: ko.observable(
Object.defineProperty(this, "strength", {
get: function () {
return this.level * 2;
},
enumerable: true
});
)
和
<span> str: <span data-bind="text: Strength"></span> / 100 </span>
我想要做的是在每次升级后调用strength
时更新显示
即
+=2
) 使用Object.defineProperty
我可能只会使用ko.computable
,但我想知道是否有办法做到这一点。
答案 0 :(得分:2)
有点不清楚你想要实现什么,但我会选择ko.computed。如果您希望通知Strength
属性的订阅者(即您的范围)(在初始绑定后level
更改时),您还应该level
可观察。
如果您仍想使用defineProperty,我希望this little example suits you(编辑:添加按钮以升级)
function ViewModel() {
var self = this;
self.level=ko.observable(5);
self.really_use_computed = ko.computed(function() {
return self.level() * 2;
});
}
var MyViewModel=new ViewModel();
Object.defineProperty(MyViewModel, "Strength", {
get: function () {
return this.level() * 2;
},
enumerable: true
});
ko.applyBindings(MyViewModel);
请注意Object.defineProperty()
的第一个参数Internet Explorer 8 standards mode supports DOM objects but not user-defined objects以及IE don't support Object.defineProperty()
的早期版本。
答案 1 :(得分:1)
Knockout ES5 plugin将满足您的需求。虽然我还必须包含Weakmap shim以使其有效。