0

私は Dojo (1.7) の初心者であり、私がばかであることを受け入れたいと思っています (そうでないことを願っています)。私は AMD 用の require.js を使用する方が快適ですが、Dojo を強制して AMD を使用するサードパーティ (ESRI) マッピング API を使用しているため、require.js も使用しようとすると厄介なエラーが発生します。

BackboneとdefineUnderscore に依存するモジュールがあります (最終的には Dojo の MVC を使用する可能性がありますが、この問題は Backbone に固有のものではないと思うので、解決したいと思います)。奇妙なことに、Dojo はdefineモジュールのロード時に my 内でコールバックを実行しているように見えますが、この時点で依存関係 (アンダースコアとバックボーン) は空のオブジェクトです{}return Backbone.View.extend...Backbone のViewプロパティが存在しないため、コールバック内でエラーが発生します。

Backbone が Underscore に依存していることはわかっていますが、これまでのところ、ハッキーに見える を使用せずに Underscore が最初に読み込まれるようにする方法がわかりませんrequire({async:0},['test1.js','test2.js'...。ただし、この場合、アンダースコアも空のオブジェクトであるため、defineいずれかの依存関係がロードされる前に のコールバックが実行されます???

EDITこのエラーが発生する前に、コンソールにアンダースコアとバックボーンの両方のHTTPリクエストと200のレスポンスが表示されるため、それらの参照に問題はないと思います。

何か具体的な...

index.html:

<script type="text/javascript">

    var dojoConfig = {
        tlmSiblingOfDojo: false,

        packages: [
            {name: 'app', location: '/js'},
            {name: 'lib', location: '/js/lib'}
        ],

        aliases: [
            ['Backbone', 'lib/backbone-0.9.2.min'],
            ['_', 'lib/underscore-1.3.3.min'],
            ['$', 'lib/jquery-1.8.0.min'],

            ['ready', 'dojo/domReady']
        ]
    };

</script>
<script type="text/javascript" src="http://serverapi.arcgisonline.com/jsapi/arcgis/?v=3.1"></script>
<script type="text/javascript">

    require([ 'app/app' ], function(App) {
        App.initialize();
    });

</script>

app.js:

define(['app/views/main-view'], function(MainView) {

    return {
        initialize : function() {
            new MainView();
        }
    };

});

メインビュー.js:

define(['_', 'Backbone', 'ready!'], function(_, Backbone) {

    // *** ERROR THROWN HERE, Backbone = {}, _ = {} ***
    return Backbone.View.extend({

        el: 'main',

        initialise: function() {

            console.log('main view initialising');

            this.render();
        },

        render: function() {

            console.log('main view rendering');
        }

    });
});

ここで何が起こっているのか誰か教えてください。また、Backbone の前に Underscore をロードするための別の提案があれば、本当に役に立ちます!

4

1 に答える 1

1

依存関係の順序を変更するだけです:

define(['_', 'Backbone', 'ready!'], function(_, Backbone) { /*...*/});

変数と変数にready!プラグインがあるためです。__.jsBackbone

編集:ネストできます:

define(["_", "require"], function(_, require) {

    require(["Backbone"], function(Backbone) {
        // your code here
    })

})

また、アンダースコアまたはバックボーンが AMD モジュールでない場合、ローカル関数変数がそれらをカバーします。

于 2012-09-05T18:15:48.873 に答える