對於這類問題我通常創建從現在分開ember-states
項目的Ember.StateManager
。然後我在控制器上計算出屬性,決定是否顯示頁面的各個部分。然後,在我的模板中,我使用僅在StateManager
處於給定狀態時纔會顯示的{{#if shouldShowPartX}} ... {{\if}}
類型語句。下面是一個更完整的例子:
App.MyController = Ember.Controller.extend({
isOpen: Ember.computed.equal('panelManager.currentState.name', 'open')
init: function() {
this._super();
# Create the state manager instance from the class defined on this controller.
this.set('panelManager', this.PanelManager.create());
},
reset: (function() {
this.get('panelManager').send('reset');
}).on('init'),
PanelManager: Ember.StateManager.extend({
initialState: 'open',
open: Ember.State.create({
# If already open do nothing.
open: function(manager) {},
# Close the panel
shrink: function(manager) {
manager.transitionTo('closed');
},
}),
closed: Ember.State.create({
# If already closed, do nothing
shrink: function() {},
# Open the panel
open: function(manager) {
manager.transitionTo('open');
},
}),
reset: function(manager) {
manager.transitionTo(manager.get('initialState'));
}
})
});
然後在我看來,我可以這樣做:
{{#if isOpen}}
<div class="panel panel-open"> ... </div>
{{else}}
<div class="panel panel-closed"> ... </div>
{{/if}}
這是一個無可否認的簡單的例子,和一個通常不會使用StateManager
了一個簡單的兩狀態,但更復雜的例子可能會令人困惑。
這會有幫助嗎?它不需要直接與ContainerView
混淆,而是依賴於處理{{#if}}
塊的隱式ContainerView
,並根據StateManager
的狀態創建視圖。
不知道這是否是問題,但[文檔](https://github.com/billysbilling/ember-animated-outlet#use-animated-outlet-instead-of-outlet)說你應該使用'動畫-outlet'而不是'animatedOutlet'。 – 2014-04-10 18:30:11