我有一个组件,在这个组件中,我从模型中观察到一个属性,在控制器设置中,模型作为控制器属性‘模型’提供给控制器。模型有属性,年龄,薪水,等级。组件中的属性将由用户输入。
该组件将被称为:
{{ui-slider prop="age"}}或
{{ui-slider prop="salary"}}这不是完整的组件,但它解释了我的问题。组件是:
App.UiSliderComponent = Ember.Component.extend({
prop:function(){
return this.get('prop');
}.property('prop'),
modelPropertyObserver:function(){
console.log("property is "+this.get('targetObject.model').get(this.get('prop'));
}.observes('targetObject.model.'+this.get('prop')),
didInsertElement:function(){
console.log("Element inserted");
}
})这不管用。当我观察到财产时
.observes('targetObject.model.age')
那它就能正常工作。
但现在它显示了
cori_component.js:29 Uncaught TypeError: this.get is not a function
我也试过.observes('targetObject.model.'+this.prop)
虽然它没有显示出任何错误,但是观察者不工作。
如何将“道具”属性连接到观察者?
或者,我是否可以将组件内部的字符串连接起来,然后将其替换为观察者。
发布于 2016-06-16 07:49:07
你可以试试,
{{ui-slider prop=model.age}}和
modelPropertyObserver: Ember.observer('prop', function() {
console.log("modelPropertyObserver");
})我不认为下面这个是可以接受的。
.observes('targetObject.model.'+this.get('prop'))发布于 2016-06-16 10:21:29
您可以通过重写init并在那里设置属性来尝试以下操作(我已经这样做了,使其具有一个动态计算属性)。我使用Babel具有ES2015特性(比如...arguments和string插值)
init() {
this._super(...arguments);
this.set('value', Ember.computed(`model.${this.get('attribute')}`, function() {
return this.get(`model.${this.get('attribute')}`);
}));
}根据文档,可以用Ember.computed替换Ember.observer (并替换相应的方法签名片段从文件中复制)。
Ember.observer('value', function(sender, key, value, rev) {
// Executes whenever the "value" property changes
// See the addObserver method for more information about the callback arguments
}https://stackoverflow.com/questions/37852347
复制相似问题