假设我有一个Ember.Object obj ,其属性为 propPath 。
我正在尝试实施:
function isComputedPropertyWithNoSetter(obj, propPath) {
// what do I do here?
// something involving Ember.meta(obj) perhaps?
}
所以我能做到:
var hasStaticProp = Ember.Object.extend({ prop: 5 }).create();
isComputedPropertyWithNoSetter(hasStaticProp, 'prop');
// => false
var hasComputedPropertyWithSetter = Ember.Object.extend({ prop: function (k, v, d) { }.property() }).create();
isComputedPropertyWithNoSetter(hasComputedPropertyWithSetter, 'prop');
// => false
var hasComputedPropertyNoSetter = Ember.Object.extend({ prop: function () { }.property() }).create();
isComputedPropertyWithNoSetter(hasComputedPropertyNoSetter, 'prop');
// => true
我正在为大型已建立的ember代码库编写'tree-walking'状态序列化代码。当我恢复状态时,我想要一个防护检查,以确保我不会意外地用静态值覆盖只读(仅限getter)计算属性。
我需要实现这个功能,所以我可以做....
if (!isComputedPropertyWithNoSetter(obj, propPath) {
// not going to accidentally overwrite a computed property with a static value
Ember.set(obj, propPath, serializedStaticValue);
}
我意识到这是相当冒险的,解决方案可能不是完全推荐的黑客。