2012-10-25 47 views
3

我正在開發應用程序維護類別Ember.js,在類別列表視圖中,我們將在用戶單擊創建按鈕時動態顯示新的cateogry表單。採用Ember的路由器之前,我們使用以下機制:如何使用Router處理動態內容?

查看:

LCF.CategoriesView = Ember.View.extend({ 
    templateName:'admin/app/templates/categories/list', 
    isNewVisible:false, 

    showNew:function() { 
     this.set('isNewVisible', true); 
    }, 

    hideNew:function() { 
     this.set('isNewVisible', false); 
    } 
}); 

模板:使用路由器

<div class="well well-small"> 
    <a class="btn btn-primary" href="#" {{action "showNewCategory"}}>Create</a> 
</div> 
{{#if view.isNewVisible}} 
    {{view LCF.NewCategoryView}} 
{{/if}} 

後,該事件將由途徑來處理,我改變了代碼如下:

路由器:

categories:Em.Route.extend({ 
     route:'/categories', 

     connectOutlets:function (router, context) { 
      router.get('applicationController').connectOutlet('categories', router.get('store').findAll(LCF.Category)); 
     }, 

     showNewCategory:function (router) { 
      router.transitionTo('categories.newCategory', {}); 
     }, 

     index:Ember.Route.extend({ 
      route:'/' 
     }), 

     newCategory:Em.Route.extend({ 
      route:'/new', 

      cancelEdit:function (router) { 
       router.transitionTo('categories.index'); 
      }, 

      connectOutlets:function (router, context) { 
       router.get('categoriesController').connectOutlet('editCategory', {}); 
       router.get('editCategoryController').enterEditing(); 
      } 
     }) 

模板:

<div class="well well-small"> 
    <a class="btn btn-primary" href="#" {{action "showNewCategory"}}>Create</a> 
</div> 
{{outlet}} 

它的工作原理。

我的問題是:

  • 它是正確的方式來處理動態視圖?我們是否需要爲頁面中的每個浮動層創建一個狀態/控制器?
  • 即使應用仍顯示類別,URL也會更改。
  • 模板中只有一個{{outlet}},如果有幾個動態視圖可以顯示,該如何處理?

回答

2
  • 對我來說這看起來不錯。對於國家創建和控制者......這裏沒有是/否的答案。通常我會說你根據上下文邏輯創建一個控制器,並且當你想要處理一個新的應用程序狀態時創建一個路由。在你的例子中,你做得很好,與類別(狀態具有所有類別的概述),顯示(顯示一個特定類別)...

  • 這裏有什麼問題嗎?抱歉:s,我不明白你想在這裏知道什麼。

  • 答案很簡單,如果您有幾個動態視圖可以在頁面中顯示,那麼您可以使用多個{{outlets}},使用命名插座。請參閱:Ember.js Router App Architecture -- How to have multiple nested view/controller pairs

+0

很酷,我會檢查它。 – renfake

+0

不客氣。如果你能澄清你想要的第二點,我會試着回答:) –

+0

對於問題2:傳統上,在rails應用程序中,我們將使用鏈接http:// xxx/categories來顯示所有類別,然後在同一頁面中,我們應該使用新的類別表單,在這種情況下,url不會更改。但是當我們使用ember的路由器時,在進入newCategory狀態後,url將變爲http:// xxx/categories/new(這是用於rails中的新頁面)。這看起來很醜。 – renfake

相關問題