需要js的jQuery依赖性错误

时间:2016-09-27 13:51:11

标签: javascript jquery requirejs

我正面临使用Require Js

加载JQuery依赖脚本

我正在使用Jquery插件,jQuery库和2个模块js

资产> js>供应商> jQuery库, 资产> js> apps.js,pageTop.js,categoryJS.js

我的apps.js:

require.config({
    'baseUrl':'assets/js',

    'paths':{

       'jQuery':'vendor/jquery-1.11.2.min',
       'viewportSize':'viewportSize-min',
       'isoTopFilter':'isotope.pkgd.min',
       'categoryJS'  :'categoryJS'

    },

    shim:{

         'jQuery': {
            'exports':'$'
         },

         'viewportSize' :{
            deps:['jQuery']
         },

         'isoTopFilter':{
            deps:['jQuery']
         },

         'pageTop':{
            deps:['jQuery']
         },

         'categoryJS':{
            deps:['jQuery']
         }
    }
});//require.config

define(['jQuery','viewportSize','isoTopFilter','pageTop','categoryJS'], function($, pageTop, categoryJS) {

$(function() {
pageTop.alertProduct();
categoryJS.categorySlider();
});
});

和我的pageTop.js

define([],function( ){
    return {

  alertProduct: function(){
    alert('I am module2');
    return true;
  }

  }

});

我的categoryJs.js

define([],function( ){
  return {

  categorySlider: function(){
    alert('I am module2');
    return true;
  }

  }

});

脚本未加载,收到错误

Uncaught TypeError: Cannot read property 'alertProduct' of undefined

有人可以帮助我,我已经尝试了一切

1 个答案:

答案 0 :(得分:1)

你有:

define(['jQuery','viewportSize','isoTopFilter','pageTop','categoryJS'],
       function($, pageTop, categoryJS)

查看依赖项列表和参数列表。 pageTop是第二个参数,因此它将获得viewportSize模块的值。这里没有什么神奇之处:依赖项中列出的每个模块都是传递给回调,它的传递顺序与它在依赖项中的顺序相同。假设您不需要viewportSizeisoTopFilter的值,则可以执行此操作:

define(['jquery','pageTop','categoryJS','viewportSize','isoTopFilter'],
       function($, pageTop, categoryJS)

另外,

  • jQuery调用define,因此您无法为其设置shim。 (很可能会被忽略。)您应该删除为其设置的shim

    与您自己的模块相同。如果您调用define并想要设置依赖项列表,请将依赖项传递给define,不要为这些模块设置shimshim仅适用于未调用define的代码。

  • jQuery将其模块名称硬编码为jquery,因此您必须将其全称为jquery。 (更多详情here。)更改您的paths,以便jquery代替jQuery