Ember.Selectを使用してEmber.jsでselectを作成するのは比較的簡単です。
問題は、optgroupを使用して、これをグループ化された選択にするにはどうすればよいかということです。これは組み込まれているとは思いませんが、テンプレートにいくつかの変更を加えることで可能になると思います。
Ember.Selectを使用してEmber.jsでselectを作成するのは比較的簡単です。
問題は、optgroupを使用して、これをグループ化された選択にするにはどうすればよいかということです。これは組み込まれているとは思いませんが、テンプレートにいくつかの変更を加えることで可能になると思います。
これは現在Emberによってネイティブにサポートされていますが、いくつかの落とし穴があります。1.4.0では、次のソリューションが機能します...
データの例は次のとおりです。
foos: Ember.A([{value: 'foo', label: 'Foo', group: 'Foos'}, {value: 'bar', label: 'Bar', group: 'Bars'}, {value: 'bar2', label: 'Bar2', group: 'Bars'}, {value: 'foo2', label: 'Foo2', group: 'Foos'}])
ビューヘルパーは次のとおりです。
{{view Ember.Select content=controller.foos optionLabelPath='content.label' optionValuePath='content.value' optionGroupPath='group'}}
上記を実行すると、次のような選択リストが表示されます。
これを回避する唯一の方法は、最初にグループ化されたフィールドで配列を並べ替えることでした。
foos: Ember.A([{value: 'foo', label: 'Foo', group: 'Foos'}, {value: 'bar', label: 'Bar', group: 'Bars'}, {value: 'bar2', label: 'Bar2', group: 'Bars'}, {value: 'foo2', label: 'Foo2', group: 'Foos'}]).sortBy("group")
これが私が思いついた解決策です。https://gist.github.com/3297425
私は2つのコレクションを作らなければなりませんでした。適切なオプションを選択できるように、1つはグループ化され、もう1つはコンテンツのみです。
groupedServiceCodes = [Ember.Object.create({label: 'Label for optgroup', content: Ember.A()}), …]
次に、groupedServiceCodesのコンテンツをフラット化して、選択の順序を維持します。
flattenedServiceCodes = [].concat(object.get('content'), …)
これはちょっとしたハックで、Emberはもっと良い解決策を望んでいると思いますが、これは私にとってはうまくいきます。これを改善するための考えを聞いてみたいです。
ここでの答えは少し時代遅れです。Emberは、データのグループ化をサポートするようになりました。あなたが持っていると想像してください:
App.SomeController = Ember.Controller.extend({
content: [{value: 'foo', label: 'Foo', group: 'Foos'}, {value: 'bar', label: 'Bar', group: 'Bars'}]
})
その後、行うことができます
Ember.Select contentBinding='content' optionLabelPath='content.label' optionValuePath='content.value' optionGroupPath='group'
optionGroupPathはcontent.pathを実行せず、pathのみを実行することに注意してください
Ember.Selectはoptgroupsをサポートしていませんが、Ember.Selectを拡張して、新しいテンプレートとオプションの新しいテンプレートを提供することでサポートできます。これは、Ember内でchosen.jsの選択をサポートするために行いました。
Emberはこれをすぐにサポートするようになりました。このgitプルリクエストを参照してくださいhttps://github.com/emberjs/ember.js/pull/2465