我有几行重复的代码
Ember.$(".close").trigger('click');
window.parent.showRegister();
in:adapters
,controllers
和routes
。
编写帮助(函数或操作)并在不同位置执行此操作的最佳位置。
例如,我可以在controller
中编写函数,但我不知道controllers
中访问RESTAdapter
的方式。
答案 0 :(得分:1)
您可以或不能从另一个访问某些抽象的主要原因是控制软件复杂性,尝试将其保持在最低限度。遵循SOLID,low coupling / high cohesion等原则可以帮助我们维护复杂的软件系统,提高系统的可理解性并减少开发过程中出错的可能性。 / p>
Ember以某种方式遵循MVC模式,因此我不建议(1)在控制器/适配器/路由器中保留DOM操作的代码,以及(2)耦合适配器,控制器并以这种方式路线。我确信有一种方法可以将此代码放在View或Ember.App类之外的模块中;或者设置处理这种情况的路由映射。
如果情况并非如此,或者您需要一个简单直接的解决方案,您可以使用丑陋的魔法结构来访问Ember中的任何地方:
App.__container__.lookup('controller:controllerName'); // controllers
App.__container__.lookup('router:main'); // routes
App.__container__.lookup('store:main'); // store, adapters, serializers
Ember.View.views['emberViewId'] // objects are dying here occasionally
双下划线告诉我们,这不是在应用程序中构建通信的推荐方法。 :)
答案 1 :(得分:1)
您可以使用帮助程序创建一个新的Ember对象作为其中的方法。
然后,您可以在Application中注册这些帮助程序,并将其注入控制器,模型和视图。
App = Ember.Application.extend();
Ember.Application.initializer({
name: 'logger',
initialize: function(container, application){
application.register('logger:main', {log: function(m){ console.log(m); }}, {instantiate: false});
application.inject('route', 'logger', 'logger:main');
}
});
App.create();
并像
一样使用它App.IndexRoute = Ember.Route.extend({
activate: function(){
// The logger property is injected into all routes
this.logger.log('Entered the index route!');
}
});