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)
ましたが、エラーは表示されませんが、オブザーバーは機能しません。

「prop」プロパティをオブザーバーに連結する方法は?
または、コンポーネント内の文字列を連結してオブザーバーに置き換える方法はありますか。

4

2 に答える 2

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 に答える