我有一个名为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);
}
}
)};
答案 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()
}
});