2

次の「メイン」モジュールを実行すると、「TypeError:OrdersPageはコンストラクターではありません」というメッセージが表示されます。

require(
    [
        'app/pages/orders/OrdersPage'
    ],
    function(OrdersPage) {
        'use strict';

        new OrdersPage();
    }
);

function(OrdersPage)内にいるとき、「OrdersPage」は未定義であることがわかりました。したがって、問題は、OrdersPageを依存関係として定義しているにもかかわらず、なぜそれが未定義なのかということです。

これが実際にヒットしているOrdersPageのコードですが、上記のエラーが出力された後は次のようになります。

require(
    [
        'backbone'
    ],
    function() {
        'use strict';

        console.log('In OrdersPage');

        return Backbone.View.extend({

        });
    }
);

要約すると、コンソール出力は次のとおりです。

TypeError: OrdersPage is not a constructor
In OrdersPage

これは、「メイン」モジュールがロードされて実行された後にOrdersPageモジュールがロードされていることを示していますが、これは遅すぎます。

編集1 この問題を示す非常に単純なプロジェクトがここにあります。

編集 2RequireJS構成でバックボーンをすでに宣言しています。

require.config({
    // Initialize the application with the main application file
    deps: ['main'],

    paths: {
        // jQuery
        jquery:                      'vendor/jquery-1.8.3',

        // Underscore
        underscore:                  'vendor/underscore-1.4.3',

        // Backbone
        backbone:                    'vendor/backbone-0.9.9',

        // Templating
        handlebars:                  'vendor/handlebars-1.0.rc.1'
    },

    shim: {
        backbone: {
            deps: ['underscore', 'jquery'],
            exports: 'Backbone'
        },

        handlebars: {
            exports: 'Handlebars'
        },

        underscore: {
            exports: '_'
        }
    }
});

require(
    [
        'app/pages/orders/main'
    ],
    function() {
        'use strict';
    }
);
4

1 に答える 1

5

define()ではなく、を使用する必要がありますrequire()。それらは非常に似require()ていますが、戻り値に対して何も行わず、モジュールをセットアップしません。

define(['backbone'], function() {
    'use strict';

    console.log('In OrdersPage');

    return Backbone.View.extend({

    });
});
于 2012-12-30T19:56:49.227 に答える