Ember-CLI - 如何访问应用程序类

时间:2014-04-16 16:41:18

标签: ember.js ember-cli

以前,当我开发ember应用程序时,我使用App作为我的全局对象,每个类都存储在这个大对象中。

喜欢这个

window.App.MyModel = Em.Object.extend({});

在浏览器控制台中,我能够做到

App.MyModel.create();

所以我很容易访问MyModel类。

现在我开始使用Ember-CLI进行实验,我对这种工具没有多少经验。我按照文档编写了这样的模型服务。

var Service = Ember.Object.extend({});
export default Service

但是现在,如何从浏览器控制台访问Service类? 我发现的唯一方法是:

App.__container__.resolve('model:service')

但我不喜欢它。还有更好的方法吗?顺便问一下,您能解释一下出口是如何运作的吗?或者是否有一些我可以研究它的来源(文档,文章)?

非常感谢您的回复。

2 个答案:

答案 0 :(得分:9)

如果您的目标是在整个应用程序的大多数地方都有可用的东西,那么您通常希望在容器上注册它。

有多种方法可以访问容器,而且你找到的那个方法不太理想。正在运行的笑话是“只要您直接访问__container__,我们就需要添加更多下划线。”

要直接控制容器上的注册事项并将其注入容器,您通常需要使用initializerUsing initializers in ember-cli非常简单,它们会自动为您执行。

检查documentation您可以看到您可以访问应用程序的容器作为参数,允许您以安全的方式操作它。

有权访问容器后,您可以使用registerinject在特定位置轻松获取内容。这是introduced here。请注意,从应用程序(浏览器控制台)的上下文外部访问容器内部的内容将需要使用App.__container__,这是预期的使用模式。

您遇到的export是ES6模块系统构造,它不是特定于Ember的。使用ES6 module transpiler可以让您更好地了解“今天我们可以做到这一点”JavaScript的内容和内容。

答案 1 :(得分:0)

对于ember 3.22,可以像这样访问应用程序类:

Ember.Namespace.NAMESPACES[1]._applicationInstances.values().next().value.lookup('service:state-events')

请注意,您可能需要将NAMESPACES[1]中的索引修改为1以外的其他索引。当返回true时,您可以确定应用程序是哪个名称空间:

Ember.Namespace.NAMESPACES[1] instanceof Application

这种方法是ember-inspector访问ember应用程序的方式:https://github.com/emberjs/ember-inspector/blob/50db91b7bd26b12098cae774a307208fe0a47d75/ember_debug/main.js#L163-L168