2016-08-16 4 views
0

コンポーネントの初期化時にのみ知っている名前のエイリアスまたはオブザーバをプロパティに追加する方法を教えてください。Ember.Bindingが非推奨になった動的プロパティへのエイリアスの作成

これは、プロパティ名がコンポーネントに渡されたデータに依存する一般的な使用コンポーネントに必要です。以前エンバーのバージョンでは、私はただのinitに結合を作成することができます。それが必要とされるとき場合、またはプロパティの変更すべてが正しく更新されるところはどこでも

binding = Ember.Binding.from("model.settings." + this.get('type')).to("setting"); 
binding.connect(this); 

は、次に「設定」を使用します。 "type"プロパティは外部からコンポーネントに渡され、コンポーネントの各インスタンスごとに異なるため、コンポーネント自体にプロパティ名をハードコードすることはできません。

Ember.BindingはEmber 2.7で廃止され、Ember 3.0では削除されます。

私はEmber.Bindingなしでこれを達成する方法を理解できません。そして、いいえ、他の場所から価値を渡すか、私が告げる限り、拘束力を持たずにこれを管理する良い方法はありません。実際のコンポーネントは上記のものより少し複雑ですが、問題は同じです。

答えて

1

あなたはember-twiddle

コントローラ/

import Ember from 'ember'; 

export default Ember.Controller.extend({ 
    appName: 'Ember Twiddle', 
    actions:{ 
    changeType(){ 
     this.set('model.settings.admin','changed-adminsettings'); 
    } 
    } 
}); 

テンプレート/ application.hbs

{{my-component model=model type='admin' }} 
<button {{action 'changeType'}}> ChangeType</button> 
をapplication.js ..ダイナミック依存キーのために計算されたプロパティを作成するためのDefinePropertyを使用する必要があります

my-comp

{{setting}} 
{{yield}} 

私-component.js

import Ember from 'ember'; 

export default Ember.Component.extend({ 
    init(){ 
    this._super(...arguments); 
    var type= this.get('type');  
    Ember.defineProperty(this,'setting',Ember.computed('model.settings.' + type,function(){ 
    return this.get('model.settings.'+type); 
    })); 
    } 
}); 

onent.hbs参考:https://github.com/emberjs/ember.js/issues/13912

関連する問題