如何在 Ember 控制器中运行操作 afterRender

Posted

技术标签:

【中文标题】如何在 Ember 控制器中运行操作 afterRender【英文标题】:How to run action in Ember Controller afterRender 【发布时间】:2015-09-02 06:12:33 【问题描述】:

我是 ember 框架的新手。我只想在渲染完成后执行一个在动作钩子中定义的函数。

var Controller = Ember.Controller.extend(
  actions: 
    foo: function() 
        console.log("foo");
    
  
);
Ember.run.schedule("afterRender",this,function() 
  this.send("foo");

但上面的代码不起作用。 我只是想知道,是否可以运行foo() afterRender?

【问题讨论】:

【参考方案1】:

你可以使用init:

App.Controller = Ember.Controller.extend(
  init: function () 
    this._super();
    Ember.run.schedule("afterRender",this,function() 
      this.send("foo");
    );
  ,

  actions: 
    foo: function() 
      console.log("foo");
    
  
);

【讨论】:

解决方案可能会导致测试错误“断言失败:您已打开测试模式,这禁用了运行循环的自动运行。您需要在运行中包装任何具有异步副作用的代码”。如何绕过这个? 在测试模式下,Ember 不会自动启动运行循环。您可以通过将调度调用包装在 Ember.run() 中来显式创建运行外观,它将在测试中工作。

以上是关于如何在 Ember 控制器中运行操作 afterRender的主要内容,如果未能解决你的问题,请参考以下文章

从 Ember 中的控制器操作返回一个承诺?

使用 Ember.js 复选框输入助手触发更改事件的操作?

Ember.JS - 如何在同一页面中使用多个模型、控制器和视图?

Ember.js 如何获取需要嵌套的控制器名称

如何调试在 phantomjs 中运行的 ember-cli 测试

如何使用异步路由进行 Ember 单元测试?