从外部范围访问 Ember 应用程序

pro*_*nya -1 ember.js

我需要从将在 ember 范围之外运行的脚本访问控制器模型。另外,是否可以以相同的方式发送动作?

请举几个例子。

谢谢。

更新

目的:我从我的 chrome 扩展中获取新模型,我需要将其设置为当前控制器并更新视图。

Mit*_*tch 6

我认为这是一个有趣的问题,我做了一些挖掘以找出答案。

获取应用程序

您可能知道您的 Ember 应用程序使用了一个全局变量,如window.MyEmberApp. 在这种情况下,获取您的应用程序很容易。如果您不知道应用程序在哪里,那就有点棘手了。

我从Ember Inspector 中提取了此代码:

function getApplication() {
  var namespaces = Ember.Namespace.NAMESPACES,
      application;

  namespaces.forEach(function(namespace) {
    if(namespace instanceof Ember.Application) {
      application = namespace;
      return false;
    }
  });
  return application;
}
Run Code Online (Sandbox Code Playgroud)

获取您的实例化控制器

您可以使用容器从您的应用程序访问您的实例化控制器:

var controller = app.__container__.lookup('controller:elephant');
controller.set('model', newModel);
Run Code Online (Sandbox Code Playgroud)

其中“大象”是您的控制器的名称。

我不确定“发送动作”的确切含义,但是是的,您可以访问控制器的动作对象并调用这些函数。

controller.actions.myAction.call(controller, 'arg1', 'arg2');
Run Code Online (Sandbox Code Playgroud)

祝你的 Chrome 扩展程序好运!