编程语言
首页 > 编程语言> > javascript – 循环引用marionette.js

javascript – 循环引用marionette.js

作者:互联网

我在marionette.js应用程序中遇到循环引用问题.

问题是:

App.js使用控制器创建路由器,并且该控制器再次需要app.js,因此它可以将视图添加到区域.正如您在下面看到的(控制器)当我打印应用程序时,它返回undefined,因为圆形参考..

controller.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');
        }
    });
}
);

router.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;
    }
);

现在解决这个问题的最佳方法是什么?我对此完全陌生,所以我真的不知道最佳做法是什么..

我在控制器中添加视图也是正确的吗?或者我应该在其他地方这样做?

提前致谢

解决方法:

我认为你应该将一个区域传递给控制器​​以实现它,你肯定需要移动你的代码.我有一个示例应用程序工作,但没有使用require,但是在控制器中创建一个区域并将一个区域从主应用程序传递给它的概念可以在这里进行详细说明.

 App.addInitializer(function () {
    var controller = new BookStoreController({region: App.mainRegion});
    layout = new CatalogLayout();
    controller.region.show(layout);
    var router = new Router({controller:controller});
});

http://jsfiddle.net/rayweb_on/hsrv7/11/

希望有所帮助.

标签:javascript,requirejs,backbone-js,marionette
来源: https://codeday.me/bug/20190620/1243611.html