RequireJS& jQuery:无法加载函数扩展

时间:2014-04-20 16:47:53

标签: requirejs

我是使用RequireJS的新手,我遇到了问题,这是错误:

  

未捕获TypeError:对象[object Object]没有方法'jarvismenu'

这是我的代码:

app.js (RequireJS主要配置):

/*global define, angular */

'use strict';


requirejs.config({
    paths: {
        'jquery'                : 'libs/jquery-2.0.2.min',
        'jqueryui'              : 'libs/jquery-ui-1.10.3.min',
        'jquerytouch'           : 'plugin/jquery-touch/jquery.ui.touch-punch.min',
        'bootstrap'             : 'bootstrap/bootstrap.min',
        'smartnotification'     : 'notification/SmartNotification.min',
        'jasviswidget'          : 'smartwidgets/jarvis.widget.min',
        'jqueryeasypiechart'    : 'plugin/easy-pie-chart/jquery.easy-pie-chart.min',
        'sparkline'             : 'plugin/sparkline/jquery.sparkline.min',
        'jqueryvalidate'        : 'plugin/jquery-validate/jquery.validate.min',
        'jquerymaskinput'       : 'plugin/masked-input/jquery.maskedinput.min',
        'select'                : 'plugin/select2/select2.min',
        'bootstrapslider'       : 'plugin/bootstrap-slider/bootstrap-slider.min',
        'jquerymbbrowser'             : 'plugin/msie-fix/jquery.mb.browser.min',
        'fastclick'             : 'plugin/fastclick/fastclick',
        'demo'                  : 'demo',
        'appDash'               : 'appDash',

        //controller
        'dashboard-ctrl'        :   'controllers/DashboardCtrl',
        'home-ctrl'             :   'controllers/HomeCtrl',
        'report-ctrl'           :   'controllers/ReportCtrl',
        'instance-ctrl'         :   'controllers/InstanceCtrl',

        //services
        'report-service'        :   'services/ReportService',
        'instance-service'      :   'services/InstanceService',

        'util-service'          :   'services/UtilService',
        //directives
//        taxonomyDrtv            : 'directives/TaxonomyDrtv',
        'directives'            :   'directives/Directives'
        //service
//        taxonomyServices        : 'services/TaxonomyService'
        //filters,
    },
    shim: {
        jqueryui            :   ['jquery'],
        jquerytouch         :   ['jquery'],
        smartnotification   :  {
            deps    :['jquery'],
            exports : 'jQuery'
        } ,
        bootstrap           :   ['jquery'],
        jasviswidget        :   ['jquery'],
        jqueryeasypiechart  :   ['jquery'],
        jqueryvalidate      :   ['jquery'],
        jquerymaskinput     :   ['jquery'],
        jquerymbbrowser     :   ['jquery'],
        select              :   ['jquery'],
        bootstrapslider     :   ['jquery','bootstrap'],
        demo                :   ['jquery'],
        appDash             :  {
            deps    :   ['jquery','jqueryui','jasviswidget','bootstrap','jquerytouch','smartnotification','sparkline'],
            exports :   'jQuery'
        }
    }
});

define('jquery-private', ['jquery'], function (jq) {
    return jq.noConflict( true );
});
require([
    'jquery',
    'jqueryui',
    'jquerytouch',
    'bootstrap',
    'smartnotification',
    'jasviswidget',
    'jqueryeasypiechart',
    'sparkline',
    'jqueryvalidate',
    'jquerymaskinput',
    'select',
    'bootstrapslider',
    'jquerymbbrowser',
    'fastclick',
    'demo',
    'appDash'
], function($){
     $(document).ready(function(){
       pageSetup(); <<<<< I want to Load this method on on page load
     });
    console.log($);
});

appDash.js

    $.fn.extend({

        //pass the options variable to the function
        jarvismenu : function(options) { << this jarvis menu variable which cannot load
            ............
            ............
           }
    });


$(document).ready(function() {

    if (!null) {
        $('nav ul').jarvismenu({
            accordion : true,
            speed : $.menu_speed,
            closedSign : '<em class="fa fa-expand-o"></em>',
            openedSign : '<em class="fa fa-collapse-o"></em>'
        });
    } else {
        alert("Error - menu anchor does not exist");
    }

});

function pageSetUp() { << i want to call this code but when i call this method it call jquery ready above too.., the problem is he cannot read jarvismenu variable  from jarvis menu above 
// some code
}

当应用程序启动时(第一个请求)工作正常没有发现错误.. 但是当我刷新(第二个请求)时,上面有一个错误。

1 个答案:

答案 0 :(得分:1)

您收到该错误是因为appDash包含jquery扩展名。

从appDash.js中取出这段代码

$.fn.extend({

    //pass the options variable to the function
    jarvismenu : function(options) {
       ... rest of code
    }
});

将它放在它自己的文件中,例如'jarvis-menu-ext.js'。

将其添加到您的路径并填充。

'jarvis-menu-ext':'libs / jarvis-menu-ext',

'jarvis-menu-ext':['jquery'],

还可以将其添加到app.js中的require调用中。

require([
  'jquery',
  'jqueryui',
  'jquerytouch',
  'bootstrap',
  'smartnotification',
  'jasviswidget',
  'jarvis-menu-ext' <<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  'jqueryeasypiechart',
  'sparkline',
  'jqueryvalidate',
  'jquerymaskinput',
  'select',
  'bootstrapslider',
  'jquerymbbrowser',
  'fastclick',
  'demo',
  'appDash'
], function($){ ...