4

Backbone.Router在执行路由之前和之后是否存在事件?我的应用程序jQuery.mobile在执行路由之前需要使用并调用 $.mobile.changePage,并且在控制器中可以通过 $.activePage 访问当前显示的页面。控制器操作完成后,我应该触发create文档上的事件以通过 $.mobile 新创建的元素来“增强”。我通过替换来做到这一点loadUrl

Backbone.history.loadUrl = ( function( old  ){
    return function() {  
       Router.trigger("all:before");   
       old.apply( Backbone.history, arguments );
       Router.trigger("all:after" );
    }
})( Backbone.history.loadUrl  );



 //Router.initialize
 initialize: function() {
     this.bind( "all:before", function( ) {  
         $.mobile.changePage( window.location.hash.split( "/" )[0] || "home", { changeHash:false} );
     });

     this.bind( "all:after", function() {
       $.mobile.activePage.trigger('create'); 
     });  
  }

可能有一些像这样的内置事件吗?

4

1 回答 1

9

到目前为止,Backbone.Router 中没有前后事件。

0.5.3 版支持以下路由器事件(所有事件都在这里

"route:[name]" (router) — 当一个路由器的路由匹配时。

不确定它会是哪个版本,但是正在开发一个通用路由事件,在 github 主干提交中#419具有此功能,但尚未在新版本中发布

之前的事件已经报告了问题(想法),请在此处查看github 问题

所以,之前的事件还没有在那里,之后的事件会在一段时间后出现,如果你真的已经需要一个之后的事件,有一种方法可以让你自己把它放进去,通过绑定到 'all' 事件,它捕获所有事件,包括所有 'route:routename' 事件。然后只需拆分事件名称,如果它以 route 开头,您就有一般的 route 事件。(如果 after 事件在主干的版本之一中发布,这当然可以删除和更改)

    this.bind('all', function (trigger, args) {
               var routeData = trigger.split(":");
                if (routeData[0] === "route") {
                   // do whatever here.  
                   // routeData[1] will have the route name
                }
        });
于 2012-01-19T07:57:08.643 回答