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

时间:2018-02-26 20:20:13

标签: javascript jquery jquery-plugins requirejs requirejs-define

对不起,如果我重复这个问题,但我在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 doc但是我还是不明白怎么做对.. 非常感谢您的建议..

1 个答案:

答案 0 :(得分:2)

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

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和菜单插件。