Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ember.js 每次在Ember中呈现模板时评估控制器属性_Ember.js - Fatal编程技术网

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

Ember.js 每次在Ember中呈现模板时评估控制器属性,ember.js,Ember.js,我有一个名为sample的模板,我正在更改控制器中基于按钮按下的属性显示。现在,我希望控制器在每次渲染模板时重置属性。当前,即使我转到“下一步”模板并返回,如果按下示例上的按钮,属性显示仍然为真。我想更改此行为,默认情况下,属性显示应为false。我知道我可以通过定义一个视图和使用didInsertElement钩子来做到这一点,但这是唯一的方法吗??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);
        }
    }
)};