对于Ember应用程序,是否可以将常量用作计算的属性键的一部分?
因此,从本质上讲,我有一个如下常量;
MY_SECTION {
MY_FIELD: "my-field-id"
}
我想要的是“ my-field-id”上的计算属性,即
myCP: function() {
console.log('Inside CP...');
}.property('section.field.my-field-id.value')
但是,我希望能够将常数用于my-field-id而不是直接使用它。有可能吗?
答案 0 :(得分:1)
Ola @testndtv,谢谢您的提问!是的,完全有可能在计算属性的键中使用常量,但是要使用它,您将需要使用@jelhan所提到的更现代的语法,因为.poperty()
已过时。
这是我在本地测试的控制器的一个有效示例,并且可以按您期望的方式工作:
import Controller from '@ember/controller';
import { defineProperty, computed } from '@ember/object';
const PROPERTY_ID = 'some-random-string-that-is-too-long-to-write';
export default Controller.extend({
// this is just for the example so we can show the value in the template
// it is not needed to get this to work
PROPERTY_ID: PROPERTY_ID,
init() {
this._super(...arguments);
defineProperty(this, 'myCP', computed(PROPERTY_ID, function() {
return this.get(PROPERTY_ID);
}));
},
actions: {
addOne() {
// this is just for the example to stop the result always being NaN because
// null + 1 = NaN
let value = this.get(PROPERTY_ID) || 0;
this.set(PROPERTY_ID, value + 1);
}
}
});
如您所见,我们正在使用从{@ ember / object'导入的defineProperty
。您可以在API documentation
这里的关键见解是您需要在init()
中为此Ember对象动态定义属性。
此控制器的相应模板如下:
Property ID is: {{PROPERTY_ID}}
<br>
And the value is: {{get this PROPERTY_ID}}
<br>
<button {{action 'addOne'}}>Add One</button>