使用带有 requireJS 的自定义 Jquery 插件

Using custom Jquery plugin with requireJS

对不起,如果我重复这个问题,但我是 requireJS 的新手,我不完全理解它的工作方式。

我正在尝试通过对元素的对角线移动来实现类似亚马逊的导航。我为此找到了一个 jQuery 插件 (https://github.com/kamens/jQuery-menu-aim),但我想在 requireJS 的帮助下实现它。

通常情况下,您只需将所有必要的脚本包含在 <script> 标签中(Jquery 和插件)。然后你找到你的导航并分配一些激活/停用子菜单的功能。喜欢的例子:

          <script src="js/jquery-1.9.1.min.js" type="text/javascript"></script>
            <script src="../jquery.menu-aim.js" type="text/javascript"></script>
            <script src="js/bootstrap.min.js" type="text/javascript"></script>
            <script>
                var $menu = $(".dropdown-menu");
                // jQuery-menu-aim: <meaningful part of the example>
                 // Hook up events to be fired on menu row activation.
               $menu.menuAim({
                    activate: activateSubmenu,
                    deactivate: deactivateSubmenu
                });

           function activateSubmenu(row) {//do something}
           function deactivateSubmenu(row) {//do someting else)
         </script>

以 requireJS 方式。在 navigation.js 文件中,我一开始就需要 menu-aim 插件,并尝试像这样实现它:

 var menuAim = require('lib/menu-aim');
 // some code
 var $menuT = $('#nav-main-deep');
 $menuT.menuAim({
        activate: activateSubmenu,
        deactivate: deactivateSubmenu

  });
   function activateSubmenu(){
        console.log('test1');
    }

    function deactivateSubmenu() {
        console.log('test2');
    }

我把整个插件 menu-aim.js 放在:

之间
define(function () {
//whole menu-aim plugin
});

可能,这不是如何 运行 requireJS 插件的方式,导致它什么都不做(我试图做一些控制台日志)。我试图查看 requireJS 文档,但我仍然不明白如何正确地做。 非常感谢您的建议..

From the GitHub code,看起来 jQuery-menu-aim 没有使用通用模块定义,因此它需要 RequireJS 配置的一些帮助。

A shim 可以帮助 RequireJS 对依赖项进行排序,因为这是一个 jQuery 插件并且 jQuery 必须首先加载并传递给它。单击此处获取 more information on RequireJS shims

将此代码添加到您的 RequireJS 配置文件中

requirejs.config({
  shim: {
    'menu-aim': {
        deps: ['jquery']
    }
  }
});

当你打电话时

require('lib/menu-aim', function() { 
  // put your menu code here 
});

jQuery 将加载菜单插件。