ここで見られる問題は、条件自体に関するものではなく、データの使用方法に関するものです。いくつかのこと:
(詳細はこちら: http://jsfiddle.net/schawaska/enRhT/ )
テンプレートを on に反応させたい場合はselectedB
、それを計算されたプロパティにし、その依存関係も指定する必要があります。この場合はselectedName
プロパティです。
selectedB: function() {
return this.get('selectedName.id') == 2;
}.property('selectedName') // This is important
また、テンプレートでバインディングをインスタンスではなくコントローラ クラスに割り当てていることに気付きました。アプリケーションを変更して を含めることを検討してくださいRouter
。これにより、モデル データを別の方法で設定できるようになります。
ルーティング メカニズムを使用すると、コントローラーがルートに割り当てられ、ビュー/テンプレートに自動的にバインドされるため、 にバインドする代わりに、またはApp.SearchController.property
を使用して実行できます。controller
controller.property
{{view Ember.Select class="my_custom_class"
contentBinding="controller.content"
optionValuePath="content.id"
optionLabelPath="content.firstName"
selectionBinding="controller.selectedName"}}
これには、さらにいくつかの変更が必要になります。
ルーターの設定
App.Router.map(function() {
this.route('search');
});
// this would require that you either create an IndexRoute
// to redirect from the root to the SearchRoute, or
// change the route path: this.route('search', { path: '/' });
コントローラーからではなく、ルートのモデル関数からデータを返す
App.SearchRoute = Em.Route.extend({
model: function() {
return [
{firstName: "Any", id: 0},
{firstName: "A", id: 1},
{firstName: "B", id: 2},
{firstName: "C", id: 3},
{firstName: "D", id: 4},
{firstName: "E", id: 5}
];
}
});
{{outlet}}
アプリケーション テンプレートへの の追加
<script type="text/x-handlebars">
{{outlet}}
</script>
正しいテンプレートを使用して、テンプレート本体を特定のテンプレートに移動するcontroller
これで、ルートがコントローラーとそのデータを提供するため、Handlebars テンプレートでキーを使用できるようになりcontroller
、SearchController が参照されます (以下を参照)。
<script type="text/x-handlebars" data-template-name="search">
{{view Ember.Select class="my_custom_class"
contentBinding="controller.content"
optionValuePath="content.id"
optionLabelPath="content.firstName"
selectionBinding="controller.selectedName"}}
{{#if selectedB}}
<p>Selected: {{controller.selectedName.firstName}}
(ID: {{controller.selectedName.id}})</p>
{{else}}
<p>Select option B</p>
{{/if}}
</script>
固定コントローラー
App.SearchController = Ember.ArrayController.extend({
selectedName: null,
selectedB: function() {
return this.get('selectedName.id') == 2 ;
}.property('selectedName')
});
命名規則により、ルートはアプリがSearchController
(この正確な名前) を持っていることを期待しており、それがすべてを結び付ける方法です。また、コントローラーが を実装していない場合、ArrayController
モデル関数が を返し、 (デフォルト)ModelArray
にバインドされないため、コントローラーは爆発します。ObjectController