4

marionette.js アプリケーションの循環参照に問題があります。

問題は:

App.js はコントローラーを使用してルーターを作成し、そのコントローラーは再び app.js を必要とするため、ビューをリージョンに追加できます。以下に示すように (コントローラー) を印刷するApplicationと、サーキュラーのために undefined が返されます。参照..

コントローラー.js:

define(
['app', 'views/ProjectItemView'],
function (Application, ProjectItemView)
{
    'use strict';
            console.log(Application); // undefined

    return Marionette.Controller.extend({
        showProjects : function()
        {
            Application.main.show(new ProjectItemView());
            console.log('project');
        }
    });
}
);

ルーター.js:

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

            return Marionette.AppRouter.extend
            (
                {
                    appRoutes:
                    {
                        'dashboard/projects' : 'showProjects'
                    }
                }
            );
        }
    );

app.js

define
(
    [
        'backbone', 'marionette', 'jquery', 'routers/DashboardRouter', 'controllers/DashboardController',
        'views/dashboard/Header'
    ],
    function(Backbone, Marionette, $, DashboardRouter, DashboardController, Header)
    {
        'use strict';

        var app = new Marionette.Application();

        app.addRegions({
            header: '#header',
            main: '#main',
        });

        app.header.show(new Header());

        app.on('initialize:after', function () {
            Backbone.history.start({pushState: true});
            app.router = new DashboardRouter({
                controller : DashboardController
            });
        });

        $(document).on("click", "a[href^='/']", function(event)
        {
            var href = $(event.currentTarget).attr('href');
            console.log(href);

            event.preventDefault();
            app.router.navigate(href, {trigger: true});
            return false;
        });

        return app;
    }
);

この問題を解決する最善の方法は何ですか?私はこれにまったく慣れていないので、ベストプラクティスが何であるかを本当に知りません..

また、コントローラーにビューを追加するのは正しいですか? それとも別の場所でやるべきですか?

前もって感謝します

4

3 に答える 3

1

私があなたを正しく理解していれば、基本的に、ルーターはアプリに依存し、コントローラーはアプリに依存しています。

その場合は、App、Router、Controller の 3 つのモジュールに分割します。次に、Router モジュールと Controller モジュールの両方で ['app',...] を定義します。 JMQ で使用したその他の基本的なコード構造を次に示します。

更新: Using-marionette-with-requirejsから、「循環依存の回避」についても説明しています。

于 2013-06-13T03:25:09.337 に答える