1

RESTHub 2.0 バックボーン スタックを使用しています

以下は私のroute.jsです

define(function (require) {

    'use strict';

    var $ = require('jquery');
    var Backbone = require('backbone');

    var HomeView = require('../views/home');

    var _pageView;

    var AppRouter = Backbone.Router.extend({

        initialize: function() {
            console.log("Router initialize");
            Backbone.history.start({ pushState: false, root: "/" });
            _pageView = new HomeView();
        },

        routes: {
            '': 'main',
            'test': 'test'
        },

        main: function() {
            console.log("Main route activated");
            require(['views/home'], function(HomeView) {
                _pageView.render(HomeView);
            });
        },

        test: function() {
            console.log("Test route activated");
            alert("test");
        }
    });

    return AppRouter;

});

ブラウザのコンソールに次のエラーが表示されます

Error: Module name "../views/home" has not been loaded yet for context: _
http://requirejs.org/docs/errors.html#notloaded

なぜこのエラーが発生するのですか?

上記のファクトリ関数を呼び出す前に、requirejs がすべての依存関係を確実にロードして実行する必要があるため、これは失敗します。define() に依存配列が指定されている場合、requirejs はすべての依存関係がその配列にリストされていると想定し、他の依存関係についてファクトリ関数をスキャンしません。したがって、依存配列を渡さないでください。

しかし、まだ機能していません!

4

1 に答える 1

3

エラーによって提供されるリンクでは、次のように述べています。

//THIS WILL FAIL
define(['require'], function (require) {
    var namedModule = require('name');
});

依存関係配列にモジュールが必要だと思います:

define(['require', '../views/home'], function (require) {
    var namedModule = require('../views/home');
});

または、すべてのモジュールをその依存関係リストに追加し、代わりにコールバック関数の引数を使用することもできます。

define(['jquery', 'underscore', 'backbone', '../views/home'], function ($, _, Backbone, HomeView) {
    // now you dont need to use require(name) at all.
});
于 2013-04-16T16:00:29.367 に答える