2014-02-10 69 views
0

我一直在嘗試使用Ember幾個小時,但無法解決問題。希望這只是一個術語問題,我在閱讀Ember文檔時被困住了。沒有根據路線渲染/刪除側邊欄

我有一個應用程序,大多數情況下,它包含一個側邊欄/頂部欄(稱爲包裝)和一個頁腳。

我的基本application.hbs看起來像這樣(我用灰燼應用套件提供結構):

{{partial "wrapper"}} 

{{outlet}} 

{{partial "footer"}} 

如果這是我的應用程序的狀態,它會工作得很好。頁面內容加載到{{outlet}}的罰款。

我的主要問題是如何以「Ember」的方式突破這個模板結構(並且最好不用去掉所有的jQuery並且不刪除DOM元素)。

我有幾條路線,我不希望包裝和頁腳顯示(他們是整頁登錄/忘記密碼路線,和一些最小界面/沒有分心模式)。

我嘗試,試圖通過使默認模板(application.hbs),以清除邊欄和頁腳:

{{#if showWrappers}} 
    {{partial "wrapper"}} 
{{/if}} 

{{outlet}} 

{{#if showWrappers}} 
    {{partial "footer"}} 
{{/if}} 

showWrappers是在ApplicationController中:

export default Ember.Controller.extend({ 

    showWrappers: function() { 
     var routes = ['login'], 
       currentPath = this.get('currentPath'), 
       show = true; 

     routes.forEach(function(item) { 
       var path = new RegExp('^' + item + '*'); 
       if (!Ember.isEmpty(currentPath.match(path))) { 
        show = false; 
       } 
     }); 

     return show; 
    }.property('currentPath'), 

}); 

Attemping過渡到/ login from/{{link-to}}返回錯誤:Uncaught Error: Cannot perform operations on a Metamorph that is not in the DOM大概是因爲我正在刪除Ember想要保留的東西(我正在使用{{link-to}}和{{bind-attr}}側邊欄,所以那裏有綁定)。

意識到我可以使用動作和jQuery來隱藏頁面元素並將它們帶回「無分散模式」模式,但我更願意學習如何構建模板並使用具有renderTemplate掛鉤的Routes潛在地使用this.render(?)吹走當前的DOM並從不同的基礎(而不是application.hbs)重建。

想法?非常樂意澄清。

回答

0

我發現disconnectOutlet,並且已經將我的諧音爲網點:

{{outlet wrapper}} 

{{outlet}} 

{{outlet footer}} 

使我ApplicationRoute使他們默認:

export default Ember.Route.extend({ 

    renderTemplate: function() { 
     this.render(); 

     this.render('wrapper', { 
      outlet: 'wrapper', 
      into: 'application' 
     }); 

     this.render('footer', { 
      outlet: 'footer', 
      into: 'application' 
     }); 
    } 

}); 

,然後在LoginRoute,我只是運行此.disconnectOutlet既包裝和頁腳,似乎工作得很好。