繁体   English   中英

哪里将JavaScript事件放入AMD模块?

[英]Where to put javascript events in AMD modules?

我正在使用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 *部分(例如,骨干视图)。

如果您使用其他组织方案,通常我会说将处理程序放置在最紧密的地方。 例如,如果模块已经具有要绑定到的DOM元素的引用,则将处理程序放入其中(并使用该特定引用,而不是调用$()遍历文档,从而有可能拾取不需要的元素)这样您就可以在元素生命周期结束时解除绑定处理程序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM