Ember.js依赖注入
Ember.js dependency injection
假设我有这个控制器
MyApp.LayoutFooterController = Ember.ObjectController.extend
formData:
name: null,
phone: null,
message: null
cleanFormData: ->
@set('formData.name', null)
@set('formData.phone', null)
@set('formData.message', null)
send: () ->
@container.lookup('api:contact').send(
@get('formData.name'),
@get('formData.phone'),
@get('formData.message')
)
@cleanFormData()
为此,我创建了服务类
MyApp.Api ||= {}
MyApp.Api.Contact = Ember.Object.extend
init(@$, @anotherDep) ->
send: (name, phone, message) ->
console.log name, phone, message
和初始值设定项
Ember.Application.initializer
name: 'contact'
initialize: (container, application) ->
container.register 'api:contact', MyApp.Api.Contact
问题是,我无法弄清楚如何设置容器以便能够通过 Ember 容器init(@$, @anotherDep)
解析我的服务类依赖项。
谁能给我解释一下,如何使用 Ember.js依赖注入(或服务定位器,我猜)容器来注入其他库或对象?
也许,我做得一点也不好。
编辑
当我查看 Ember 的容器源代码时,我找到了一个解决方案:
Ember.Application.initializer
name: 'contact'
initialize: (container, application) ->
container.register 'api:contact', { create: () -> new MyApp.Api.Contact(application.$) }
但这干净吗?
一般来说,你不想自己连接所有的部件,你想在你的控制器中使用needs
让 Ember 为你做这件事。 我完全不确定 Ember 如何处理 3 级类名与 2 级类名,所以我只用两个级别进行演示。 ( MyApp.ApiContact
而不是 MyApp.Api.Contact
.) 此外,send
是存在于所有(或几乎所有)对象的本机 Ember 方法,因此您希望改用类似 sendMessage
的东西,这样您就不会最终遇到难以诊断的冲突。 在你告诉Ember你的控制器needs
apiContact
之后,你可以打电话给this.get('controllers.apiContact')
来掌握它。
MyApp.LayoutFooterController = Ember.ObjectController.extend({
needs : ['apiContact'],
// All your other stuff here
sendMessage : function(){
this.get('controllers.apiContact').sendMessage(...);
}
});
相关文章:
- 如何在jasmine测试中为有角度的项目注入依赖项
- 在angularjs中注入依赖项之前加载api
- 使用grunt注入依赖项
- 如何在角度中修改注入依赖项的依赖项
- 在 Angular 中动态注入依赖模块
- AngularJS 控制器注入依赖关系 - 为什么构造函数有 []
- $scope未为角度注入依赖项定义
- AngularJS:在$provide时注入依赖项
- 在config()模块中注入依赖项-AngularJS
- 未知提供程序尝试在Angular控制器上注入依赖项时出错
- AngularJS如何在使用控制器作为语法时注入依赖项
- 如何在angularjs的app.config中注入依赖
- 正在测试带有注入依赖的node js模块
- 在Angular 2 2.0.0-rc.5的单元测试中注入依赖项
- 如何在不使用ES6类特性的情况下在Aurelia中注入依赖
- 区别就在这里,注入依赖
- 如何对外部脚本注入依赖项
- 单元测试-使用应用、调用或绑定方法在JavaScript中注入依赖项
- 在单元测试AngularJS服务时注入依赖服务
- 在AngularJs中通过工厂注入依赖