Backbone.js history';更改路线';事件
是否存在每次导航到不同URL时都会触发的常规事件Backbone.js history';更改路线';事件,backbone.js,Backbone.js,是否存在每次导航到不同URL时都会触发的常规事件 window.App = Models: {} Collections: {} Views: {} Routers: {} init: -> # Initialize Routers new App.Routers.Main() # Initialize History Backbone.history.start(pushState: true) # BIND VIEW C
window.App =
Models: {}
Collections: {}
Views: {}
Routers: {}
init: ->
# Initialize Routers
new App.Routers.Main()
# Initialize History
Backbone.history.start(pushState: true)
# BIND VIEW CHANGE?
$(@).on 'changeOfRoute', ->
console.log "Different Page"
$(document).ready ->
App.init()
按视图执行此操作是可能的,但我正在寻找通用解决方案。路由器上有“路由”事件:
- “路由”(路由器、路由、参数)-当任何路由匹配时,由历史记录(或路由器)触发
myRouter.on("route", function(route, params) {
console.log("Different Page: " + route);
});
这将仅触发显式定义的路由的事件。如果要为未明确定义的路由触发事件,请根据@TTT添加一个“splat”路由:不幸的是,主干网没有提供前/后事件,因此您需要覆盖或扩展Router.route。您可以在下面的答案中找到实现此目的的方法:此扩展可能对您有用: 来自 每当路由匹配且其相应的回调即将执行时,在路由器内部调用此方法。重写它以执行路由的自定义解析或包装,例如,在将查询字符串交给路由回调之前解析查询字符串,如下所示:
var Router = Backbone.Router.extend({
execute: function(callback, args) {
args.push(parseQueryString(args.pop()));
if (callback) callback.apply(this, args);
}
});
有一些有用的代码用于重新定义路由器,以支持“之前”和“之后”挂钩,尽管它需要随着主干网的每个版本更改而更新。谢谢,这很有效。但是,该事件在路由更改后激发。如果开始路由更改,是否会触发事件?看起来1.1.x版本中有Router.execute,它在每个路由之前触发。仅供参考,路线和历史
route
事件现在被拆分