[英]Where I can write helper in ember to avoid code duplication
我有幾行重復的代碼
Ember.$(".close").trigger('click'); window.parent.showRegister();
在: adapters
, controllers
和routes
。
編寫幫助程序(功能或操作)並在不同位置執行該程序的最佳位置。
例如我可以在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
雙下划線告訴我們,這不是在應用程序中建立通信的推薦方法。 :)
您可以使用輔助方法創建新的Ember對象。
然后,您可以在Application中注冊這些幫助程序,並將其注入controller,model和view中。
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!');
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.