我是使用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
}
当应用程序启动时(第一个请求)工作正常没有发现错误.. 但是当我刷新(第二个请求)时,上面有一个错误。
答案 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($){ ...