我正在使用requirejs将大量 .js 文件转换为 AMD 模块
我实现了关于返回函数的概念以及很多链接类,但是,我如何处理诸如以下的事件:
$('blah blah').onClick( ...
$('blah blah 2').onChange( ...
我是否只是创建一个不返回任何内容的模块?处理这类事情的最佳方法是什么?
我正在使用requirejs将大量 .js 文件转换为 AMD 模块
我实现了关于返回函数的概念以及很多链接类,但是,我如何处理诸如以下的事件:
$('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 视图)。
如果您正在使用其他一些组织方案,通常我会说将处理程序放在它们绑定最紧密的地方。例如,如果一个模块已经引用了您要绑定到的 DOM 元素,则将处理程序与它一起放入(并使用该特定引用,而不是调用$()
遍历文档,可能会拾取不需要的元素),以便您可以在元素生命周期结束时取消绑定处理程序。