0

我有一个组件,我在其中观察模型的属性,并且模型作为控制器属性“模型”被馈送到控制器设置中的控制器。模型具有年龄、薪水、等级等属性。组件中的属性由用户输入。

该组件将被称为:

{{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)
虽然它没有显示任何错误,但观察者不起作用。

如何将“道具”属性连接到观察者?
或者有什么方法可以连接组件内部的字符串,然后将其替换为观察者。

4

2 回答 2

1

相反,你可以尝试,

{{ui-slider prop=model.age}}

modelPropertyObserver: Ember.observer('prop', function() {
    console.log("modelPropertyObserver");
})

我不认为下面的一个是可以接受的。

.observes('targetObject.model.'+this.get('prop'))
于 2016-06-16T07:49:07.063 回答
0

您可以通过覆盖 init 并在那里设置属性来尝试以下操作(我这样做是为了拥有一个动态计算属性)。我正在使用 Babel 来拥有 ES2015 功能(比如...arguments和字符串插值)

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
}
于 2016-06-16T10:21:29.683 回答