2012-12-06 29 views
1

(編輯:簡化的東西低於位)車把查看不刷新時{{的#if}} {{別的}}條件改變

我有一個車把模板與{{的#if等}}有條件的,當我更改相關數據時,視圖會首次更新,但隨後不會繼續更新後續更改。我正在切換條件中的布爾值,並且我知道切換正在運行並切換屬性,因爲我可以在控制檯上觀察切換屬性,但是我說實際視圖只刷新一次。在我的html文件,這看起來是這樣的:

<script type="text/x-handlebars" data-template-name="application"> 
<body> 
<div class="row"> 
    {{#if App.Nav.show}} 
    {{outlet nav}} 
    {{/if}} 
    <div class="span10"> 
    <h1>Hello</h1> 
    {{outlet}} 
    </div> 
</div> 
</body> 
</script> 

和遠一點上,切換:

<script type="text/x-handlebars" data-template-name="people">                                     
    <a {{action toggleMenu}}> toggle </a> 
</script> 

,並在JavaScript:

App.NavController = Ember.Controller.extend(); 
App.NavView = Ember.View.extend({ 
    templateName: 'nav' 
}); 
App.Nav = Ember.Object.create({ 
    show: true 
}); 

最後的相關位路由器:

App.Router = Ember.Router.extend({ 
    enableLogging: true, 
    root: Ember.Route.extend({ 
    index: Ember.Route.extend({ 
     route: '/', 
     showPerson: Ember.Route.transitionTo('aName'), 
     toggleMenu: function(){ 
      console.log('Changing the toggle!'); 
      App.Nav.toggleShow(); 
     }, 
     connectOutlets: function(router){ 
      router.get('applicationController').connectOutlet('nav', 'nav'); 
      router.get('applicationController').connectOutlet('allPeople', unrelated_function()) 
     } 
    }) 
    }) 
}); 
+0

很顯然,現在回想起來,該視圖實際上不更新而且我的問題是插座斷開連接,並且不會自動重新連接......如果我將該功能以路由器作爲參數並在需要時連接它,它就可以工作。這是最佳做法嗎? – mg2

+0

你想要做什麼?你只想隱藏/顯示一個視圖或其他任何東西? –

+0

在這種情況下,是的 - 是否有一個更規範的方式來做到這一點? – mg2

回答

1

我沒有使用connectOutlet顯示視圖,讓我知道是否有背後使用connectOutlet方法的一些目的,同時here是我實現切換視圖知名度

+0

謝謝 - 這是有幫助的。你是對的 - 我不需要爲導航欄使用插座,我只能使用視圖。非常感激! – mg2

2

我愛d說出你的觀點。事情是這樣的:

<script type="text/x-handlebars" data-template-name="people"> 
     <a {{action toggleMenu}}> toggle </a> 
     {{#if App.Nav.show}} 
      <div>navigation</div> 
     {{/if}} 
     <div class="span10"> 
      <h1>Hello {{name}}</h1> 
     </div> 
</script> 

那麼你的應用程序視圖應該是這個樣子:

<script type="text/x-handlebars" data-template-name="application"> 
    <body> 
      <div class="row">{{outlet}}</div> 
    </body> 
</script> 

讓我知道,如果你嘗試過了,它的工作。

+0

謝謝 - 這也適用。我希望能夠在視圖堆棧中保留更高級別的可選「視圖」元素,但是這可以成功地預見到隱藏導航欄。 – mg2

+0

您的DOM上的更高級別可能要重得多。堅持小的變化可能是個好主意。 –