これが他のビュー/タブに実装されていることを示すこのフィドルを見てください。このサンプルでは、の代わりに単純なものを使用していますが、必要なことを実行します。Em.ControllerEm.CollectionController
私は2つのcssクラスを持っています:
.visible {visibility: visible}
.invisible {visibility: hidden}
次のビューはclassNameBinding、子ビューでそれらを使用しています。contentBindingそして、コントローラーでモデルをポイントしてモデルを親ビューにバインドすると、子ビューにcurrentStateは親のプロパティを監視するプロパティがあります。この子ビューをクリックすると、currentState「closed」に設定され、IsVisibleメソッドが再度評価され、適切な値がclassNameBindingに送られます。
App.OtherView = Em.View.extend({
templateName: 'other',
contentBinding: 'controller.content',
currentStateBinding: 'controller.content.state',
ButtonView: Ember.View.extend({
tagName: 'a',
click: function(e) {
this.set('parentView.currentState', 'closed');
},
classNameBindings: 'IsVisible:btn visible:invisible',
IsVisible: function() {
return this.get('parentView.currentState') === 'open';
}.property('parentView.currentState')
})
});
テンプレートの設定方法は次のとおりです
<script type="text/x-handlebars" data-template-name="other" >
<h2>Other</h2>
ID: {{content.id}}<br />
Name: {{content.name}}<br />
State: {{content.state}}<br />
{{#view view.ButtonView }}
Close
{{/view}}
</script>
または、このサンプル(ここにソースがあります)は、を使用して同じ機能を実現する方法の概念が非常に似ています.propertyが、これはもう少し複雑で、ナビゲーションバーメニュー用です。私がどのようにやっているかを確認してください。あなたは私が持っているApp.NavigationViewという名前の子ビューを見つけるでしょう。これは、コントローラーでプロパティの値をチェックしてから、ビューでチェックします。その比較はtrueまたはfalseを返し、関数プロパティを呼び出す式に基づいてクラス名を設定します。これは、あなたの質問に基づいて作成した最初のフィドルとほぼ同じです。NavigationItemViewclassNameBindingisActive
お役に立てれば。