Ember.js 每次在Ember中呈现模板时评估控制器属性
我有一个名为sample的模板,我正在更改控制器中基于按钮按下的属性显示。现在,我希望控制器在每次渲染模板时重置属性。当前,即使我转到“下一步”模板并返回,如果按下示例上的按钮,属性显示仍然为真。我想更改此行为,默认情况下,属性显示应为false。我知道我可以通过定义一个视图和使用didInsertElement钩子来做到这一点,但这是唯一的方法吗??Ember.js网站表示,在Ember.js中创建视图通常仅出于以下原因: 当您需要复杂地处理用户事件时 当您想要创建一个可重用的组件时 我没有做上述任何一件事。以下是一些示例代码:Ember.js 每次在Ember中呈现模板时评估控制器属性,ember.js,Ember.js,我有一个名为sample的模板,我正在更改控制器中基于按钮按下的属性显示。现在,我希望控制器在每次渲染模板时重置属性。当前,即使我转到“下一步”模板并返回,如果按下示例上的按钮,属性显示仍然为真。我想更改此行为,默认情况下,属性显示应为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);
}
}
)};
{{{#如果显示}
展示物品
{{/if}
改变
{{{链接到'下一个'}下一个{{/链接到}
你好
{{{#链接到'sample'}返回{{/链接到}
App.SampleController=Ember.Controllers.Extend{(
秀:假,,
行动:{
changeShow:function(){
此.controllerFor('sample').set('show',true);
}
}
)};
您可以对正在执行此操作的路由使用renderTemplate钩子,并更改其中的控制器变量
我会这样做:
App.PostsRoute = Ember.Route.extend({
renderTemplate: function(controller, model) {
var favController = this.controllerFor('favoritePost');
favController.set("toggle", false)
this._super()
}
});
您可以使用
didtransformation
操作,一旦发生转换,该操作将自动触发
谢谢你的回答。这对我有用。我还尝试使用afterRender钩子在加载模板后执行一些操作,但没有成功。有没有其他钩子可以在模板渲染后使用?
App.SampleController=Ember.Controllers.Extend{(
show:false,
actions:{
didTransition:function(){
this.controllerFor('sample').set('show',false);
},
changeShow:function(){
this.controllerFor('sample').set('show',true);
}
}
)};