6

我有以下 requireJS 配置。在尝试引用包/ImagingX 模块时,即使我可以看到脚本已在 firebug 中加载,我也总是未定义。如果我将有问题的 js 文件移动到 baseUrl 目录并删除 package/ 它会按预期工作。

我究竟做错了什么?

window.requirejs.config(
        {
            baseUrl: '/Scripts',
            paths: {
                "jquery": "./jquery-1.7.1.min",
                "jqx": "/Content/Plugins/jqWidgets",
                "package" : "/Scripts/packages"
            },
            urlArgs: "bust=" + (new Date()).getTime(),
            shim : {
                'jqx/jqxcore': ['jquery'],
                'jqx/jqxsplitter': ['jquery','jqx/jqxcore']
            }
        }
    );

    window.require(['jquery', 'layoutManager', 'container', 'package/ImagingX'],
        function ($,lm,container,px) {
            
            px.Focus();

            $(document).ready(function () {
                lm.Init(); // Sets up panes
                container.Init(); //Set up the containers
            });
    });

2012 年 15 月 10 日更新

我现在急切地想解决这个问题,我已经把所有东西都剥离了基础,所以这里是新的主文件:

(function () {

    requirejs.config({
        paths: {
            "packages": "packages"
        }
    });

    require([
            'packages/testmodule'
        ],
        function (tm) {
                alert(tm);
    });
    
})();

以及位于名为 packages 的子文件夹中的模块。

define('testmodule',
function () {

    alert("called");
   
    return {
        set : 'rar  '    
    };

});

我可以看到脚本已加载,但它从未被执行,因此我从未得到它的参考。

在此处输入图像描述

4

2 回答 2

4
 requirejs.config({
        paths: {
            //"jquery": "./jquery-1.8.2.min",
            //"jqx": "/Content/Plugins/jqWidgets",
            "templates": 'templates',
            "text": "commonRequireJsModules/text",
            "domReady": "commonRequireJsModules/domReady",
            "packages" : 'packages/'
            //'signalR': './jquery.signalR-0.5.3.min',
            //'knockout': './knockout-2.1.0',
            //'pubsub' : './pubsub'
        }
        //,urlArgs: "bust=" + (new Date()).getTime()
        //,
        //shim : {
        //    'jqx/jqxcore': ['jquery'],
        //    'jqx/jqxsplitter': ['jquery', 'jqx/jqxcore'],
        //    'signalR': ['jquery'],
        //    'pubsub' : ['jquery']
        //}
    });

包路径上的斜杠似乎已经解决了这个问题,部分原因是还删除了模块定义部分中的名称。所以现在看起来像

define(['deps'],function(deps){
});

而不是

define('myMod',['deps'],function(deps){
});
于 2012-10-15T10:25:53.207 回答
1

几件事:

  • 使用 window.require 而不仅仅是 require 似乎很奇怪
  • 'shim' 中的名称必须与 'paths' 中的名称匹配,这里不是这种情况
  • document.ready 由 require 免费完成,无需再做

那么:您的 JS 控制台中是否有任何加载错误?它是否说缺少脚本?

这是一个工作要求配置,路由器位于此代码的同一文件夹中:

require.config({
    paths:{
        'jquery':'lib/jquery.min',
        'backbone':'lib/backbone.min',
        'underscore':'lib/underscore.min',
        'router':'Router'
    },
    shim:{
        'backbone':{ deps:['jquery', 'underscore'] },
        'router':{ deps:['backbone'] }
    }
});

require(['router', 'jquery', 'underscore', 'backbone'],
    function (Router) {
        var router = new Router();
        $('img').hide();
    });
});

和 index.html:

<html>
<head>
    <script data-main="assets/js/App.js" src="assets/js/lib/require.min.js"></script>
</head>
<body>...</body>
</html>
于 2012-10-12T11:00:41.713 回答