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)
但我不喜欢它.还有更好的方法吗?顺便问一下,您能解释一下出口是如何运作的吗?或者是否有一些我可以研究它的来源(文档,文章)?
非常感谢您的回复.
如果您的目标是在整个应用程序的大多数地方都有可用的东西,那么您通常希望在容器上注册它.
有多种方法可以访问容器,而且你找到的那个方法不太理想.正在运行的笑话是"任何时候你直接访问__container__我们需要添加更多下划线."
要直接控制容器上的注册事项并将其注入容器,您通常需要使用初始化程序.在ember-cli中使用初始化程序非常简单,它们会自动执行.
查看文档,您可以看到您可以访问应用程序的容器作为参数,允许您以安全的方式操作它.
一旦您可以访问容器,就可以使用register和inject来使内容在特定位置轻松可用.这是在这里介绍的.需要注意的是,从应用程序(浏览器控制台)的上下文外部访问容器内部的内容将需要使用,App.__container__这是预期的使用模式.
而export你遇到的是ES6模块系统结构,它不是特定于Ember的.使用ES6模块转换器可以让您很好地了解"今天我们可以做到这一点"类型的JavaScript所带来的内容和内容.