はい。コントローラーでは、 を操作するときに選択した値を保持するためのプロパティを作成する必要がありますEmber.Select
。
以下のコードでは、Greetings を選択ボックスのコンテンツとして設定しています。それらの Greetings を一覧表示するコントローラー (check ) には、バインドしてApplicationRoute
いるというプロパティもあり、他のいくつかを使用しています。ビューがロードされたときにアイテムがまだ選択されていない場合に備えて、事前に選択したい値 (1 と 3) をフィルタリングするプロパティ。selectedItems
Select
これにより、id が 1 または 3 のアイテムが選択済みとしてマークされた複数選択ボックスがレンダリングされます。ここでソースを見ることができます: http://jsfiddle.net/schawaska/Y8P4m/
ハンドルバー:
<script type="text/x-handlebars">
<h1>Test</h1>
{{view Ember.Select
multiple="true"
selectionBinding="controller.selectedItems"
contentBinding="controller"
optionLabelPath="content.text"
optionValuePath="content.id"}}
</script>
JavaScript:
window.App = Ember.Application.create();
App.Store = DS.Store.extend({
revision: 11,
adapter: 'DS.FixtureAdapter'
});
App.Greeting = DS.Model.extend({
text: DS.attr('string'),
when: DS.attr('date'),
selected: false,
isSelected: function() {
return this.get('selected');
}.property('selected')
});
App.ApplicationController = Em.ArrayController.extend({
preselected: function() {
return this.get('content').filter(function(greeting) {
return greeting.get('id') == 1 ||
greeting.get('id') == 3;
});
}.property('content.@each'),
selectedItems: function() {
if(this.get('selected.length') <= 0) {
return this.get('preselected');
} else {
return this.get('selected');
}
}.property('selected', 'preselected'),
selected: function() {
return this.get('content').filter(function(greeting) {
return greeting.get('isSelected');
})
}.property('content.@each')
});
App.Greeting.FIXTURES = [
{id: 1, text: 'First', when: '3/4/2013 2:44:52 PM'},
{id: 2, text: 'Second', when: '3/4/2013 2:44:52 PM'},
{id: 3, text: 'Third', when: '3/4/2013 2:44:52 PM'},
{id: 4, text: 'Fourth', when: '3/4/2013 3:44:52 PM'}
];
App.ApplicationRoute = Em.Route.extend({
setupController: function(controller) {
controller.set('model', App.Greeting.find());
}
});