0

新しい Require/Backbone アプリで初期設定を行っていますが、「グローバル リソース」オブジェクトが一部のサブモジュールと通信できないようです。何らかの循環依存関係に関係していると思われますが、どこで/なぜ/どのようにかはわかりません。

すべての shimmed 項目がconfigure.jsにロードされた後、アプリが開始されます。

/* kick off */
define([ 
    'cxn/newUI/rr',
    'cxn/newUI/routers/mainRouter'
], function( app, MainRouter) {

    // create router
    app.router = new MainRouter({
        model: app
    });

    Backbone.history.start({
        pushState: true,
        root: app.rootURL
    });
});

rr.jsは、すべてのグローバル アプリが定義されている「リソース レジストリ」です。

define(['underscore', 'backbone'], function(_, Backbone) {

    // main namespace object
    var ResourceRegistry = {

        rootURL: '/',
        models: {},
        views: {},
        collections: {},
        router: {},
        eventBus: _.extend( {}, Backbone.Events ),
        tplCache: {}

    };

    return ResourceRegistry;
});

mainRouter.jsが起動し、ルートの準備が完了し、メイン コントローラーが読み込まれます

define([
'cxn/newUI/rr',
'cxn/newUI/controllers/_mainAppController',
'cxn/newUI/controllers/homeController',
'cxn/newUI/controllers/inboxController'
], function( app, MainAppController, HomeController, InboxController ) {

function cleanup() {
    if (currentPage && currentPage.destroy) {
        currentPage.destroy();
    }
}

var currentPage;

var MainRouter = Backbone.Router.extend({

    routes: {
        ''                  : 'index',
        'home'              : 'home',
        'messages'          : 'showInbox',
        'messages/:id'      : 'showMessage',
        'patient/:id'       : 'showPatient'
    },

    initialize: function(options) {
        this.model = options.model;
        this.eventBus = app.eventBus;
        this._listenForEvents();
    },

    // route definition methods
    index: function() {
        MainAppController.initialize({ eventBus: app.eventBus });
        return this;
    },

    ....

最後に、メイン コントローラがロードして「postInitialize」フックを実行すると、すべてが停止します。

define([
'cxn/newUI/rr',

'cxn/newUI/controllers/_baseController',

'cxn/newUI/views/_mainAppView/pageHeaderView',
'cxn/newUI/views/_mainAppView/mainContentView',
'cxn/newUI/views/_mainAppView/pageFooterView',
'cxn/newUI/views/_mainAppView/pageBottomDrawerView'

], function( app, Controller, PageHeaderView, MainContentView, PageFooterView, PageBottomDrawerView ) {

// Define the "new" collections/models/etc to pass to the controller here

// Define the controller
var MainAppController = new Controller({

    name: '_mainAppController',

    app: app,

    postInitialize: function() {

        app.eventBus.on('mainContentArea:loaded', function(route) {
            if (!route) {
                return app.router.navigate('home');
            }
            else {
                return app.router.navigate(route);
            }
        });

        //this._setupDocumentReady();
    },

エラーが発生しますUncaught TypeError: Object #<Object> has no method 'navigate'

Chrome Dev Tools でブレークポイントを設定すると、「app.router」が最初のキックオフで定義されているにもかかわらず、グローバル名前空間の一部ではないため、コントローラーで使用できないことがわかります。何か不足していますか?これを正しく定義していませんか?

4

1 に答える 1

0

mainRouter.js の最後の部分が含まれていませんでした...愚かな質問:追加しましたか

return MainRouter;

最後に?

于 2013-03-23T13:13:01.940 に答える