2013-04-30 81 views
3


什麼是Ember.ViewState已被棄用的替代方案?我嘗試使用Ember.State而不是ContainerView等,但無法加載視圖。如果有人能夠幫助(最好有任何例子),那會很好。Ember ViewState替代方案

(無法分享整個代碼,因爲它是在進展中的工作)

newState: Ember.State.create({ 
     ... 
     view: Ember.ContainerView.create({ 
      childViews: [ Dashboard.ChartView.create() ] 
     }), 
}); 

怎麼也調試爲什麼視圖不會渲染,特別是如果你想知道,如果你的佈局和網點是什麼問題?網點是否與StateManager協同工作?現在,假設我在index.html中只有以下內容,是否足夠(我正在使用Ember AnimatedOutlet)?

<script type="text/x-handlebars" data-template-name="application"> 
    {{animatedOutlet name="main"}} 
</script> 

有了新的Ember規範,如何在不使用路由的情況下使用帶有StateManager的插座?我想要一個只有默認「/」路線的單頁應用程序?

謝謝
水稻

+0

不知道這是否是問題,但[文檔](https://github.com/billysbilling/ember-animated-outlet#use-animated-outlet-instead-of-outlet)說你應該使用'動畫-outlet'而不是'animatedOutlet'。 – 2014-04-10 18:30:11

回答

0

對於這類問題我通常創建從現在分開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的狀態創建視圖。