【问题标题】:Module is not getting started with #url模块没有开始使用#url
【发布时间】:2025-11-30 10:00:01
【问题描述】:

我正在开发一个使用主干和 Marionette js 的应用程序。 Nw问题出在路由上。在浏览应用程序流程时,如果工作正常。在其中一个模块中,如果您刷新页面,则 backbne 模块没有启动。意味着如果您尝试使用 url #URL 访问该模块,那么它将无法启动。

这是该模块的代码

define(["app"], function (Splanner) {
    Splanner.module("RegistrationModule", function (Registration, Splanner, Backbone, Marionette, $, _) {
        Registration.startWithParent = false;

        Registration.onStart = function () {
            console.log('Module Start');
        };
        Registration.onStop = function () {
            console.log('Module Stop');
        };
    });

    Splanner.module("RegistrationRouter", function (RegistrationRouter, Splanner, Backbone, Marionette, $, _) {

        RegistrationRouter.Router = Marionette.AppRouter.extend({
            appRoutes: {
                "newvisitor/registration": "visitorRegistration"
            }
        });

        var executeAction = function (controllerAPI, arg) {
            Splanner.startModule("RegistrationModule");
            controllerAPI(arg);
        };

        var API = {
            visitorRegistration: function () {
                require(["modules/visitor/registration/RegistrationController"], function (RegistrationController) {
                    executeAction(RegistrationController.showVisitorRegistration);
                });
            }
        };

        Splanner.on("visitor:registration:show", function (myVisitor) {
            Splanner.navigate("newvisitor/registration");
            API.visitorRegistration(myVisitor);
        });
        Splanner.addInitializer(function () {
            new RegistrationRouter.Router({
                controller: API
            });
        });

    });
    return Splanner.RegistrationRouter;
});

现在,当我通过应用程序流程时它不起作用,但是当我使用 #newvisitor/registration url 时,模块没有启动。

【问题讨论】:

    标签: jquery backbone.js marionette single-page-application backbone-routing


    【解决方案1】:

    按照我阅读的木偶书,这个设置看起来像我使用的那个。在我想要在开始时可用的任何模块中,我已经在初始化后触发的 app.js 文件中调用了它。不知道这对你来说是否一样,但我在开始这个并且没有可用的模块时被抓住了

    MyApp.on("initialize:after", function() {
          if (Backbone.history) {
             require([
                "apps/dashboard/dashboard_app",
                "apps/server/server_app",
                "apps/installations/installations_app",
                "apps/system_check/system_check_app",
                "apps/accounts/account_management_app",
    
             ], function() {
                Backbone.history.start();
    
                if (MyApp.getCurrentRoute() === "") {
                   MyApp.trigger("dashboard:show");
                }
             });
          }
       });
    

    【讨论】: