Requirejs 如果我定义sDashboard.js,那么总是未定义

Requirejs 如果我定义sDashboard.js,那么总是未定义,requirejs,Requirejs,我正在为我的应用程序使用sDashboard,当我尝试使用requirejs创建模块时,我总是得到未定义的 此sDashboard可在github上获得 我的配置文件 requirejs.config({ baseUrl: 'http://localhost:8090/module-require_dashboard/js/', paths: { jquery:'lib/jquery.min', mockjax:'lib/jquery.mockj

我正在为我的应用程序使用sDashboard,当我尝试使用requirejs创建模块时,我总是得到未定义的

此sDashboard可在github上获得

我的配置文件

requirejs.config({
    baseUrl: 'http://localhost:8090/module-require_dashboard/js/',
    paths: {
        jquery:'lib/jquery.min',
        mockjax:'lib/jquery.mockjax',
        jqueryui: 'lib/jquery-ui.min',
        Flotr:'lib/flotr2/flotr2',
        sDashboard:'lib/jquery-sDashboard'
    },
    shim: { //add the dependencies that should be loaded synchronously        
        'jqueryui': ['jquery'],
        'timepicker': ['jqueryui'],
        'mockjax': ['jquery']
    }
});
sDashBoard小部件js

sDashboard的js文件的一部分,供您参考

( function(factory) {"use strict";
        if ( typeof define === 'function' && define.amd) {
            // Register as an AMD module if available...
             define(['jquery', 'Flotr'], factory);
        } else {
            // Browser globals for the unenlightened...
            factory($, Flotr);
        }
    }(function($, Flotr) {"use strict";

        $.widget("mn.sDashboard", {
            version : "2.5",
            options : {
                dashboardData : [],
                widgetWidth :400
            },
当我在Dashboard.js文件中使用define来使用sDashboard时,我总是得到sDashboard的未定义值

define(['jquery','jqueryui','sDashboard'], function(JQuery,jqueryui,sDashboard){
    console.log(sDashboard);    
});
我不知道我犯了什么错误,请给出你的建议。

sDashboard是一个jQuery插件。加载jQuery插件时,它将自己安装在
jQuery
对象上。在RequireJS中加载jQuery插件的事实对此没有任何改变。因此,通常这样的插件在AMD环境(如RequireJS)中加载时不会从其工厂功能返回任何内容。因此,如果您尝试检查模块,您会发现
未定义
。这是完全正常的,并不表示它没有正确加载。您必须测试
jQuery
对象上是否存在插件

您要做的是这样的:

define(['jquery', 'jqueryui', 'sDashboard'], function(jQuery, jqueryui) {
    console.log(jQuery.sDashboard);    
});

您不需要在回调中有一个对应于
“sDashboard”
的参数,因为这将是无用的。(当然,如果在
“sDashboard”
之后有其他依赖项,则必须在参数列表中为其设置一个占位符,否则其他参数在其应位于的位置之后会得到错误的值。)

感谢您的回复。我试着照你说的做,但还是遇到了同样的问题。我在JSFIDLE中有一个工作代码。jsfiddle-。请你检查一下,是否可以。你的错误与RequireJS无关。您调用了
requirejs
,而不是
require
。您也没有对应于
#test
的元素。看到拯救sry出了什么问题。这是链接。$。sDashboard仍然显示未定义。您没有使用我在答案中显示的代码。您必须请求
“sDashboard”
模块以便加载。您不必在回调的参数中为其设置相应的参数。(在加载资源的过程中也存在一些问题:您要求jsiddle加载内容,然后要求RequireJS再次加载它们。)