我在这里看到的问题与条件本身无关,而与您如何使用数据有关。一些东西:
(你可以在这里看到更多:http: //jsfiddle.net/schawaska/enRhT/)
如果你想让你的模板对 做出反应selectedB
,你必须把它变成一个计算属性,同时指定它的依赖关系,在你的例子中是selectedName
属性:
selectedB: function() {
return this.get('selectedName.id') == 2;
}.property('selectedName') // This is important
另外,我注意到在您的模板中,您将绑定分配给控制器类而不是实例。考虑更改您的应用程序以包含Router
,这将允许您以不同的方式设置模型数据。
App.SearchController.property
使用路由机制,控制器将被分配给您的路由并自动绑定到视图/模板,因此您可以使用controller
or来代替绑定到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
现在,因为路由提供了控制器和它的数据,你应该能够controller
在你的 Handlebars 模板中使用这个键,它将引用 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
(这个确切的名称),这就是它将所有东西连接在一起的方式。如果你的控制器没有实现 a ArrayController
,它会爆炸,因为你的模型函数现在返回 aModelArray
并且它不会绑定到 a ObjectController
(默认)