如何从Marionette控制器中重定向到另一条路线

How can I redirect from within a Marionette Controller to another route?

本文关键字:一条路 重定向 Marionette 控制器      更新时间:2024-04-03

如何从Marionette控制器内重定向到另一个路由?例如:

var controller = new MyAccountController({
    myAccountView: new MyAccountView({
        el: 'body'
    })
});
var router = new MyAccountRouter({
    controller: controller
});

在控制器方法中,据我所知,我无法访问路由器,我认为您需要从路由器访问navigate()方法才能进行导航。基本上,如果控制器方法中的某些条件不满足,我想做的是在某个地方进行客户端重定向。

我认为首选的方法是触发另一个对象可以侦听的事件。这是一个我会做的事情的小例子(未经测试)。

window.App = new Marionette.Application();
App.on('start', function() {
    Backbone.history.start();
});
App.start();
var Router = Marionette.AppRouter.extend({
    appRoutes: {
        '': 'home'
    }
});
var Controller = Marionette.Controller.extend({
    home: function() {
        App.trigger('someEvent');
    }
});
var AnotherController = Marionette.Controller.extend({
    doSomeOtherThing: function() {
        alert('Hello world');
    });
    App.on('someEvent', function() {
        doSomeOtherThing();
    });
});
var controller = new Controller;
var anotherController = new AnotherController;
controller.router = new Router({
    controller: controller
});
controller.start();
anotherController.start();

您可以将Backbone历史对象用于此目的:

Backbone.history.navigate('/some/route', {
    trigger: true
});

上述操作会将URL更新为/some/route,并强制路由器触发路由处理程序。