Backbone.js:如何获取当前路线?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (15)

使用Backbone,我有可能获得当前路由的名称吗?我知道如何绑定到路由更改事件,但我希望能够在其他时间和更改之间确定当前路由。

提问于
用户回答回答于

如果已在应用程序中实例化路由器,则以下行将返回当前片段:

Backbone.history.getFragment();

Backbone.js文档

“[...] History作为一个全局路由器(每帧)来处理hashchange事件或pushState,匹配适当的路由并触发回调。你不应该自己创建其中的一个 - 你应该使用引用到Backbone.history,如果你使用路由器,将自动为你创建 [...]“

如果你需要绑定到这个片段的函数的名字,你可以在你的路由器的范围内做出这样的事情:

alert( this.routes[Backbone.history.getFragment()] );

或者从你的路由器外面这样做:

alert( myRouter.routes[Backbone.history.getFragment()] );
用户回答回答于

current : function() {
    var Router = this,
        fragment = Backbone.history.fragment,
        routes = _.pairs(Router.routes),
        route = null, params = null, matched;

    matched = _.find(routes, function(handler) {
        route = _.isRegExp(handler[0]) ? handler[0] : Router._routeToRegExp(handler[0]);
        return route.test(fragment);
    });

    if(matched) {
        // NEW: Extracts the params using the internal
        // function _extractParameters 
        params = Router._extractParameters(route, fragment);
        route = matched[1];
    }

    return {
        route : route,
        fragment : fragment,
        params : params
    };
}

扫码关注云+社区