每次在Ember中呈现模板时评估控制器属性

时间:2014-03-03 14:57:14

标签: ember.js

我有一个名为sample的模板,我正在根据按下按钮更改控制器中的属性show。现在我希望控制器在每次呈现模板时重置属性。目前,即使我转到“下一个”模板并返回,如果按下样品上的按钮,属性显示仍然为真。我想更改此行为,默认情况下属性show应为false。我知道我可以通过定义一个视图和使用didInsertElement钩子来做到这一点,但这是唯一的方法吗? Ember.js网站说Ember.js中的视图通常只是出于以下原因而创建:

当您需要复杂的用户事件处理时 如果要创建可重复使用的组件

我不做以上任何事情。以下是一些示例代码:

<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);
        }
    }
)};

2 个答案:

答案 0 :(得分: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);
        }
    }
)};

答案 1 :(得分: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()
  }
});