我可以在ember中编写helper以避免代码重复

Where I can write helper in ember to avoid code duplication

本文关键字:代码 helper ember 我可以      更新时间:2023-09-26

我有几行重复的代码

Ember.$(".close").trigger('click'); window.parent.showRegister();

在:adapterscontrollersroutes中。

哪里是编写帮助程序(函数或操作)并在不同位置执行的最佳位置。

例如,我可以在controller中编写函数,但我不知道如何在RESTAdapter中访问controllers

您可以或不能访问另一个抽象的主要原因是对软件复杂性的控制,试图将其保持在最低限度。遵循SOLID、低耦合/高内聚等原则可以帮助我们维护复杂的软件系统,提高系统的可理解性,并降低开发过程中出错的可能性。

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

双下划线告诉我们,这不是在应用程序中构建通信的推荐方式。:)

您可以使用helper创建一个新的Ember对象作为其中的方法。

然后,您可以在应用程序中注册这些帮助程序,并将其注入控制器、模型和视图中。

参见http://emberjs.com/guides/understanding-ember/dependency-injection-and-service-lookup/#toc_dependency-注入代码寄存器注入代码了解更多细节

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!');
   }
});