每次导航到其他网址时是否会触发一般事件?
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()
可以按视图执行此操作,但我正在寻找一般解决方案。
答案 0 :(得分:47)
路由器上有“route”事件:
http://backbonejs.org/#Events-catalog
- “route”(路由器,路由,参数) - 在匹配任何路由时由历史记录(或路由器)触发。
这允许您绑定到特定路由。
如果要在任何路径之后触发处理程序,请绑定到“route”,路由将是第一个参数:
myRouter.on("route", function(route, params) {
console.log("Different Page: " + route);
});
这只会触发明确定义的路线的事件。如果要为未明确定义的路径触发事件,请按How to detect invalid route and trigger function in Backbone.Controller
添加“splat”路径答案 1 :(得分:2)
只要路由匹配并且即将执行相应的回调,就会在路由器内部调用此方法。覆盖它以执行自定义解析或包装路由,例如,在将查询字符串交给路由回调之前解析查询字符串,如下所示:
var Router = Backbone.Router.extend({
execute: function(callback, args) {
args.push(parseQueryString(args.pop()));
if (callback) callback.apply(this, args);
}
});
This site提供了一些有用的代码,用于重新定义路由器以支持'之前'和'之后'钩子,虽然它需要更新Backbone的每个版本更改。
答案 2 :(得分:0)
@TTT:不幸的是Backbone没有给我们一个前/后事件,所以你需要覆盖或扩展Router.route。您可以在此答案中找到执行此操作的方法:https://stackoverflow.com/a/16298966/2330244
答案 3 :(得分:0)