6

次のrequireJS構成があります。package / 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年10月15日更新

私は今この問題を解決するために必死になっています、私はすべてを基本に戻したので、ここに新しいメインファイルがあります:

(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

いくつかのこと:

  • 単にrequireの代わりにwindow.requireを使用するのは奇妙に思えます
  • 'shim'の名前は'paths'の名前と一致する必要がありますが、そうではありません。
  • document.readyはrequireによって無料で実行され、再度実行する必要はありません

だから:JSコンソールにロードエラーがありますか?スクリプトが欠落していると言っていますか?

これが動作するrequire構成です。ルーターは、このコードの同じフォルダーにあります。

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 に答える