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

Rob*_*lík 4 ember.js ember-cli

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

像这样

window.App.MyModel = Em.Object.extend({});
Run Code Online (Sandbox Code Playgroud)

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

App.MyModel.create();
Run Code Online (Sandbox Code Playgroud)

所以我很容易访问MyModel类.

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

var Service = Ember.Object.extend({});
export default Service
Run Code Online (Sandbox Code Playgroud)

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

App.__container__.resolve('model:service')
Run Code Online (Sandbox Code Playgroud)

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

非常感谢您的回复.

nat*_*ond 9

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

有多种方法可以访问容器,而且你找到的那个方法不太理想.正在运行的笑话是"任何时候你直接访问__container__我们需要添加更多下划线."

要直接控制容器上的注册事项并将其注入容器,您通常需要使用初始化程序.在ember-cli中使用初始化程序非常简单,它们会自动执行.

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

一旦您可以访问容器,就可以使用registerinject来使内容在特定位置轻松可用.这是在这里介绍的.需要注意的是,从应用程序(浏览器控制台)的上下文外部访问容器内部的内容将需要使用,App.__container__这是预期的使用模式.

export你遇到的是ES6模块系统结构,它不是特定于Ember的.使用ES6模块转换器可以让您很好地了解"今天我们可以做到这一点"类型的JavaScript所带来的内容和内容.