以前当我开发ember应用程序时,我使用App作为我的全局对象,每个类都存储在这个大对象中。
就像这样
window.App.MyModel = Em.Object.extend({});
在浏览器控制台中,我可以
App.MyModel.create();
所以对我来说访问MyModel类真的很容易。
现在我开始尝试Ember-CLI,我对这类工具没有太多经验。我按照文档创建了我的模型服务,如下所示。
var Service = Ember.Object.extend({});
export default Service
但是现在,如何从浏览器控制台访问服务类?我发现的唯一方法是:
App.__container__.resolve('model:service')
但我不太喜欢它。有更好的方法吗?顺便问一下,你能解释一下导出是如何工作的吗?或者有一些来源(文档,文章),我可以研究它?
非常感谢您的回复。
2条答案
按热度按时间but5z9lq1#
如果您的目标是在应用程序的大多数地方都可以使用某些内容,则通常需要在容器上注册它。
有多种方法可以访问容器,您所找到的方法并不理想,这是正确的。流传的笑话是“任何时候您直接访问
__container__
时,我们都需要添加更多下划线。”要直接控制如何在容器上注册和注入内容,通常需要使用初始化器。在ember-cli中使用初始化器非常简单,它们会自动执行。
查看文档后,您可以看到您可以将应用程序的容器作为参数访问,从而可以安全地对其进行操作。
一旦你有了容器的访问权限,你就可以使用register和inject来使内容在特定的位置变得容易使用。这里介绍了这一点。需要注意的是,从你的应用上下文(浏览器控制台)之外访问容器内部的内容将需要使用
App.__container__
,这是预期的使用模式。您运行的
export
是一个ES6模块系统构造,它不是Ember特定的。使用ES6 module transpiler可以给予您很好地了解“我们今天就可以做”类型的JavaScript中的内容。e3bfsja22#
对于ember 3.22,可以这样访问应用程序类:
请注意,您可能需要将
NAMESPACES[1]
中的索引修改为1
以外的值。当此函数返回true时,您可以确定哪个命名空间是您的应用程序:此方法是ember-inspector访问ember应用程序的方式:https://github.com/emberjs/ember-inspector/blob/50db91b7bd26b12098cae774a307208fe0a47d75/ember_debug/main.js#L163-L168