「ニーズ」機能を使用して、あるコントローラーが別のコントローラーから値を取得できるようにしようとしています。これは、値をバインドする前に、私のアプリの簡素化されたバージョンを示す JSFiddle です: http://jsfiddle.net/kevinwh/WRxnE/4/
App.ApplicationController = Ember.ObjectController.extend({
init: function() {
this._super();
},
dishClicked: function() {
console.log('clicked');
this.incrementProperty('clickCount');
}
});
App.DishController = Ember.ObjectController.extend({
needs: ['application'],
init: function() {
this._super();
},
//clickCountBinding: 'controllers.application.clickCount'
});
基本的に、私の ApplicationController には、Dish リンクの 1 つがクリックされるたびに (アクションによって) 更新される clickCount プロパティがあります。リンクをクリックすると、linkTo を介して DishRoute もアクティブになります。
ここで、含まれている DishController が ApplicationController の clickCount にもアクセスできるようにしたいと考えています。そこで、'needs' プロパティと clickCountBinding プロパティ (JSFiddle でコメント解除する必要があります) を追加します。次に、リンクをクリックすると、次のような苦情が表示されます。 assertion failed: Cannot delegate set('clickCount', 0) to the 'content' property of object proxy : its 'content' is undefined.
モデル コンテンツがコントローラーに設定される前にバインディングがアクティブ化されているようです。コントローラーは linkTo によってセットアップされているため、私の DishRoute.model() および DishRoute.setupController() メソッドは呼び出されません。また、バインド エラーが発生する前に DishController.init() メソッドが呼び出されることさえありません。
コンテンツ メンバ オブジェクトをクラスに追加する (JSFiddle でコメント アウトする) だけでよいのではないかと考えましたが、これを行うと奇妙な結果が得られます。リンクごとにクリック カウントが個別に増加します。興味深いですが、私が求めているものではありません。
では、これらのコントローラー間で clickCount 値を共有するにはどうすればよいでしょうか? バインディングが機能するように、DishController でコンテンツを設定する他の方法はありますか?