骨干路由器事件

abu*_*uba 4 javascript backbone.js backbone-events

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'); 
     });  
  }
Run Code Online (Sandbox Code Playgroud)

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

San*_*der 9

截至目前,Backbone.Router中没有前后事件.

版本0.5.3支持以下路由器事件(此处的所有事件)

"route:[name]"(路由器) - 当路由器的其中一条路由匹配时.

不确定它将是哪个版本,但是正在开发一般路由事件,在github trunk commit #419中有这个功能,但它还没有在新版本中发布

有关于之前事件的所有已报告的问题(想法),请在此处检查github问题.

所以,之前的事件还没有在那里,之后的事件会在一段时间之后到来,如果你真的需要一个事后的事件,有一种方法你可以把它放在自己,通过绑定到'all'事件,它捕获所有事件,包括所有'route:routename'事件.然后只需拆分事件名称,如果它以路线开头,则您有一般路线事件.(如果后续事件在骨干的一个版本中发布,当然可以删除和更改)

    this.bind('all', function (trigger, args) {
               var routeData = trigger.split(":");
                if (routeData[0] === "route") {
                   // do whatever here.  
                   // routeData[1] will have the route name
                }
        });
Run Code Online (Sandbox Code Playgroud)

  • "路线"事件直到之后才开始 (2认同)