2014-03-03 65 views
0

我有一個名爲sample的模板,我正在根據按鈕更改控制器中的屬性顯示。現在我希望控制器在每次渲染模板時重置屬性。目前,即使我轉到「下一個」模板並返回,如果按下樣品上的按鈕,屬性顯示仍然爲真。我想改變這種行爲,屬性顯示默認爲false。我知道我可以通過定義一個視圖並使用didInsertElement鉤子來做到這一點,但這是唯一的方法嗎? Ember.js網站說,在Ember.js視圖通常僅適用於以下原因產生:每次在Ember中呈現模板時評估控制器屬性

當你需要的用戶事件 的複雜處理當你想創建一個可重複使用的組件

和我不要做任何上述事情。下面是一些示例代碼:

<script type="text/x-handlebars" data-template-name="sample"> 
     {{#if show}} 
      Showing stuff 
     {{/if}} 
     <button {{action changeShow}}>Change</button> 
     {{#link-to 'next'}} Next {{/link-to}} 
</script> 

<script type="text/x-handlebars" data-template-name="next"> 
     Hello 
     {{#link-to 'sample'}}Back{{/link-to}} 
</script> 
App.SampleController=Ember.Controllers.Extend{(
    show:false, 
    actions:{ 
     changeShow:function(){ 
      this.controllerFor('sample').set('show',true); 
     } 
    } 
)}; 

回答

0

你可以使用你在做這個路由的renderTemplate掛鉤,改變控制變量在那裏。

http://emberjs.com/api/classes/Ember.Route.html#method_renderTemplate

我會做這樣的事情:

App.PostsRoute = Ember.Route.extend({ 

    renderTemplate: function(controller, model) { 
    var favController = this.controllerFor('favoritePost'); 
    favController.set("toggle", false) 
    this._super() 
    } 
}); 
+0

感謝您的回答。這對我有用。我還嘗試使用afterRender掛鉤在模板加載後執行某些操作,但不起作用。是否有任何其他的鉤子可以用於模板渲染後的事情? –

1

可以使用didTransition行動,一旦發生了轉變,它會自動觸發。 didTransition action

App.SampleController=Ember.Controllers.Extend{(
    show:false, 
    actions:{ 
     didTransition:function(){ 
      this.controllerFor('sample').set('show',false); 
     }, 
     changeShow:function(){ 
      this.controllerFor('sample').set('show',true); 
     } 
    } 
)}; 
相關問題