如何检查ember计算属性是否定义了setter?

时间:2015-04-01 22:35:57

标签: ember.js

假设我有一个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); 
}

我意识到这是相当冒险的,解决方案可能不是完全推荐的黑客。

0 个答案:

没有答案