我是在把一個巨大的.js的進程文件爲AMD模塊使用requirejs在AMD模塊中放置javascript事件的位置?
我知道有關返回功能,這樣的概念,這是多連桿類,但是我該如何處理事件,例如:
$('blah blah').onClick(...
$('blah blah 2').onChange(...
我只是創建一個不返回任何東西的模塊嗎?處理這些事情的最好方法是什麼?
我是在把一個巨大的.js的進程文件爲AMD模塊使用requirejs在AMD模塊中放置javascript事件的位置?
我知道有關返回功能,這樣的概念,這是多連桿類,但是我該如何處理事件,例如:
$('blah blah').onClick(...
$('blah blah 2').onChange(...
我只是創建一個不返回任何東西的模塊嗎?處理這些事情的最好方法是什麼?
如果你想僅執行一次,在應用程序初始化,只是把它放在你的模塊的身體,不返回任何東西:
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事件的正確方法它給你更多的控制當這是評估。
由於選擇一個元素,附加一個處理程序與jQuery選擇器發生在整個文檔上,它可以在技術上放在任何地方。
我會說這很大程度上取決於你如何組織你的模塊。
如果您將它們拆分爲MV *組件,則交互處理程序將進入V *部分(例如Backbone View)。
如果您使用其他組織方案,通常我會說把處理程序放在最緊密的地方。例如,如果一個模塊已經有了一個你想要綁定的DOM元素的引用,就把它放在它的處理器中(並且使用該特定的引用,而不是調用$()
遍歷文檔,可能拾取不需要的元素),這樣您可以在元素生命週期結束時解除綁定處理程序。
我發佈了一些具有一般性意見的答案,但如果您描述了模塊使用的組織方案(例如,每個人將要做什麼),它將有助於縮小建議的範圍, – freejosh