每次应用程序在Backbone.js中切换URL时我都需要运行一个函数,我需要知道URL已更改为的hashtag。我假设有一个我可以绑定的事件,但我无法弄清楚哪个事件和要绑定的对象。
具体来说,我想将新网址发送到分析应用程序。
答案 0 :(得分:32)
我知道这是一个老帖子,但就像@kirk建议的那样,Backbone.js已经建立了它。
Backbone.history.on("all", function (route, router) {
//console.log(window.location.hash);
});
我认为你最好不要使用这种方法。
答案 1 :(得分:5)
@qwertymk就在那里。您可以在窗口对象上查找hashchange事件:
// jQuery example
$(window).bind('hashchange', function(){
console.log(window.location.hash);
});
答案 2 :(得分:4)
将此放在代码中的顶部
Backbone.History.prototype.navigate = _.wrap(Backbone.History.prototype.navigate, function(){
// Get arguments as an array
var args = _.toArray(arguments);
// firs argument is the original function
var original = args.shift();
// Set the before event
Backbone.history.trigger('before:url-change', args);
// Call original function
var res = original.apply(this, args);
// After event
Backbone.history.trigger('url-changed');
// Return original result
return res;
});
上面的代码将包装History.navigate函数,并在调用时触发“before:url-change”和“url-changed”
稍后您可以使用
Backbone.history.bind('before:url-change', function(path,e){
console.log("before url change", path, e)
});
答案 3 :(得分:2)
还有另一个“Backbone.history.on('route',...)”事件,它也有效,你可以发现它在库中被触发了:
Backbone.history.on('route',function(){debugger;});
更精确,因为'all'是一个全部: 从Backbone文档引用:
触发一个或多个事件,触发所有绑定的回调。除了事件名称之外,回调传递与
trigger
相同的参数(除非你正在监听"all"
,这将导致你的回调接收事件的真实名称作为第一个参数)
顺便说一句,Backbone最佳实践是使用listenTo方法,例如:
myView.listenTo(Backbone.history,'route',function(){debugger;})
这样您就不需要手动清理事件侦听器 - 而是在逻辑上绑定到view / model / etc.使用它。