2

在 Backbone 中,有没有办法在更改 URL 的情况下触发路由事件处理程序?

我的意思是我想触发一个路由处理程序,但我不想更改 URL。因此,我不想使用

router.navigate(route, {trigger: true});

因为这会导致 URL 发生变化。

4

3 回答 3

2

路由器本身连接到一个功能。简单的答案是直接调用该函数,只是绕过路由处理。

例子

(function( $, Backbone ) {
    var exports = window.app = window.app || {},
        Router = Backbone.Router.extend({
            // Here you declare what the routes are in your router
            // and what functionality they should trigger.
            routes: {
                "help"                : "help",
                "search/:query"       : "search",
                "search/:query/p:page": "search"
            },

            // Declare route functions.
            help  : function() {},
            search: function( query, page ) {}
        });

    // Export the router.
    exports.router = new Router();

    // Just a dummy object for calling the router.
    var cookieMonster = {
        init: function() {
            // Do something on init.

            // End with calling the route help function.
            exports.router.help();
        }
    };
}(jQuery, Backbone));

cookieMonster.init()在这种情况下,将以调用help路由器中的函数结束。

一个技巧是查看 Backbone Marionette,你有一个控制器,它的功能逻辑与路由分离,这是让 Marionette 很棒的许多事情之一。

于 2013-03-12T14:35:36.663 回答
1

对于它的价值,木偶路由在这里得到了广泛的解释:http: //samples.leanpub.com/marionette-gentle-introduction-sample.pdf

所讨论的策略是将 URL 管理与应用程序反应(例如切换子应用程序)分开。这意味着您可以在不修改 URl 片段的情况下让您的应用程序触发处理程序(使用 Marionette 事件)。

于 2013-06-04T12:52:47.577 回答
0

你试过Backbone.history.loadUrl(route);吗?

于 2014-01-07T16:21:32.343 回答