次のような各ヘルパーを持つ単一のビューがありました。
<table class="select-sect" cellspacing="0">
{{#each sections}}
<tr {{bindAttr class="highlight:highlight"}} {{action "selectSection" }}>
<td class="key">
{{#each zones}}
<em {{bindAttr style="color"}}> </em>
{{/each}}
</td>
<td class="sect">{{name}}</td>
<td class="price">{{currency lowPrice}} - {{currency highPrice}}</td>
</tr>
{{/each}}
</table>
このような動的クラスのバインドは非常にうまく機能しました。コントローラーで section.highlight == true を設定すると、ビューは適切なクラスで更新されます。
「呼び出し」コード:
zone.section.set('highlight', true);
各行で他のイベントを処理する必要があるため、表の行全体をネストされたビューに移行しました。以前と同じように動的クラスを機能させる方法を探しています。
{{#each sections}}
{{#view SYOS.SelectSectionRowView sectionBinding="this" }}
<td class="key">
{{#each section.zones}}
<em {{bindAttr style="color"}}> </em>
{{/each}}
</td>
<td class="sect">{{section.name}}</td>
<td class="price">{{currency section.lowPrice}} - {{currency section.highPrice}}</td>
{{/view}}
{{/each}}
#view ヘルパーに適用する必要があるため、同じ bindAttr ソリューションを使用できるとは思いません。classNameBindings と classBinding も試しましたが、役に立ちませんでした。section.highlight を更新しても、このビューで動的クラスが適用されなくなりました。
classNameBindings で表示:
SYOS.SelectSectionRowView = Em.View.extend({
tagName: 'tr',
classNameBindings: ['isHighlighted:highlight'],
isHighlighted: function () {
return this.section.highlight;
} //also tried .property('section')
});
classBinding で表示:
{{#view SYOS.SelectSectionRowView sectionBinding="this" classBinding="needsHighlight"}}
ビュークラスで:
needsHighlight: function () {
if (this.section.highlight) {
return 'highlight';
}
return '';
} .property('section'),
これらのどちらもうまくいかないようです。このようなシナリオを実現する方法について、誰か洞察を与えることができますか?
どうもありがとう!