2

足りないものがあると思います。Dojoローダーを使用する代わりにRequireJSを使用してdojoモジュールを使用できることを読みました。私はRequireJSとモジュールの定義に半ば慣れていますが、何が起こっているのか理解できないようです。dojo jsファイルを見ると、自分のモジュールを宣言するときとまったく同じようにdefine()を使用していることがわかりました。私のファイルはこのように整理されています

// File path
-js
    main.js
    - lib
        .require.js
        -dojo
            // All dojo files

何が欠けているのかわかりませんが、Dojoモジュールをロードしようとすると、値が未定義になります。ここにいくつかのサンプルHTMLがあります:

// index.html
<html>
    <head>
    </head>
    <body>
        // include require script & set main.js
        <script data-main="js/main" src="js/lib/require.js"></script>
    </body>
</html>

およびサンプルのmain.jsファイル...

    // Sample main.js file

    // BaseUrl = js/

    require.config({
        packages : [
            name     : 'dojo',
            location : 'lib/dojo';
        ]
    });

    require(['dojo', 'dojo/dom'], function(dojo, dom) {

        // 'dojo'     should load dojo/main.js
        // 'dojo/dom' should load dojo/dom.js

        // But they have a value of "undefined" when I look at them in the console
        console.log(dojo);
    });

私が間違っていることについて何か考えはありますか?補足として、コンソールでこのエラーが発生することがあります

TypeError: _3.add is not a function
[Break On This Error]   

_3.add("dom-addeventlistener",!!document.addEventListener);

前もって感謝します!

4

4 に答える 4

1

_3.add("dom-addeventlistener",!!document.addEventListener);実際にはhas.add("dom-addeventlistener", !!document.addEventListener);

このエラー_3.add is not a functionは、Dojo の AMD 実装とは異なり、requirejs が has.js API を定義していないために発生します。Dojo は、AMD ローダーから has.js 実装をプルしようとします。外部ローダーを使用する場合は、dojoConfig を介して指定する必要があります。縮小されたビルドを実行するときはstaticHasFeatures 、ビルド プロファイルにを追加する必要があります。

staticHasFeatures: {
    "dojo-has-api": 0 // default 1
}

そうすることで、問題は解決しました。

詳細情報

于 2015-01-13T13:23:44.953 に答える
0

_3は、Dojo の縮小されたスタンドアロン ディストリビューションを使用していることを示しています。別のローダーで Dojo を使用する場合は、Dojo のダウンロード ページからダウンロードしたソース/SDK を使用することをお勧めします。

于 2013-12-09T21:48:14.910 に答える
0

まず、パッケージ構成定義はオブジェクトの配列です。

require.config({
    packages : [
        {
            name     : 'dojo',
            location : 'lib/dojo';
        }
    ]
});

その後、devtools のネットワーク タブをチェックインして、require.js が正しいファイルをロードしていることと、パスが適切であることを確認する必要があります。locationに相対的であることを覚えておいてくださいbaseUrl

この助けを願っています!

于 2012-10-13T19:16:57.203 に答える