2013-07-09 24 views
2

我是在把一個巨大的.js的進程文件爲AMD模塊使用requirejs在AMD模塊中放置javascript事件的位置?

我知道有關返回功能,這樣的概念,這是多連桿類,但是我該如何處理事件,例如:

$('blah blah').onClick(... 

$('blah blah 2').onChange(... 

我只是創建一個不返回任何東西的模塊嗎?處理這些事情的最好方法是什麼?

+0

我發佈了一些具有一般性意見的答案,但如果您描述了模塊使用的組織方案(例如,每個人將要做什麼),它將有助於縮小建議的範圍, – freejosh

回答

1

如果你想僅執行一次,在應用程序初始化,只是把它放在你的模塊的身體,不返回任何東西:

define([...], function() { 
    // All code here will be executed once at initialization. 
}); 

人體所有代碼會被執行一次,如只要您導入該模塊。對於jQuery選擇器來說,這是一個壞主意,因爲不能保證在評估時DOM將被正確加載。

如果您需要手動調用你的代碼,一次或多次,在一個對象封裝它,你可以導入並在需要時調用它:

define([...], function() { 
    return { 
    registerEvents : function() { 
     // All code here will be executed when `module.registerEvents()` is called. 
    } 
    }; 
}); 

這將是註冊DOM事件的正確方法它給你更多的控制這是評估。

0

由於選擇一個元素,附加一個處理程序與jQuery選擇器發生在整個文檔上,它可以在技術上放在任何地方。

我會說這很大程度上取決於你如何組織你的模塊。

如果您將它們拆分爲MV *組件,則交互處理程序將進入V *部分(例如Backbone View)。

如果您使用其他組織方案,通常我會說把處理程序放在最緊密的地方。例如,如果一個模塊已經有了一個你想要綁定的DOM元素的引用,就把它放在它的處理器中(並且使用該特定的引用,而不是調用$()遍歷文檔,可能拾取不需要的元素),這樣您可以在元素生命週期結束時解除綁定處理程序。

相關問題