これが他のビュー/タブに実装されていることを示すこのフィドルを見てください。このサンプルでは、の代わりに単純なものを使用していますが、必要なことを実行します。Em.Controller
Em.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を返し、関数プロパティを呼び出す式に基づいてクラス名を設定します。これは、あなたの質問に基づいて作成した最初のフィドルとほぼ同じです。NavigationItemView
classNameBinding
isActive
お役に立てれば。