Backbone.Router
中是否存在执行路由前后的事件?
我的应用程序使用 jQuery.mobile
并且在执行路由之前需要调用 $.mobile.changePage 并且在 Controller 中可以通过 $.activePage 访问当前显示的页面。当 Controller 的 Action 完成时,我应该触发文档上的 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');
});
}
是否有一些像这样的内置事件?
最佳答案
目前 Backbone.Router 中没有前后事件。
版本 0.5.3 支持以下路由器事件 ( all events here )
"route:[name]"(router) — 当某个路由器的路由匹配时。
不确定将发布哪个版本,但正在开发通用路由事件, 在 github 主干提交 #419有这个功能,但是还没有出新版本
之前的事件已经报告了所有问题(想法),请查看 github issue on that在这里。
所以,之前的事件还没有在那里,之后的事件会在一段时间后出现, 如果你真的已经需要一个事后事件,有一种方法可以让你自己加入, 通过绑定(bind)到 '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
}
});
关于javascript - 主干路由器事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8922557/