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)
可能有一些像这样的内置事件吗?
截至目前,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)