如何在Backbone.js中跟踪路由器更改事件
How do I track router change events in Backbone.js
每次应用程序在Backbone.js中切换URL时,我都需要运行一个函数,并且我需要知道URL更改为哪个标签。我假设有一个事件可以绑定,但我还没能弄清楚要绑定到哪个事件和哪个对象。
具体来说,我想将新的URL发送到分析应用程序。
我知道这是一个旧帖子,但就像@kirk建议的那样,Backbone.js已经构建了它。
Backbone.history.on("all", function (route, router) {
//console.log(window.location.hash);
});
我认为你最好用这种方法。
@qwertymk已经走了一半。您可以在窗口对象上查找hashchange事件:
// jQuery example
$(window).bind('hashchange', function(){
console.log(window.location.hash);
});
将其放在代码的顶部
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"answers"url changed"
稍后您可以使用
Backbone.history.bind('before:url-change', function(path,e){
console.log("before url change", path, e)
});
还有另一个"Backbone.history.on('route',…)"事件,它也起作用,你可以在库中发现它被触发):
Backbone.history.on('route',function(){debugger;});
它更精确,因为"all"是包罗万象的:主干文档报价:
触发一个或多个事件,触发所有绑定回调。回调传递的参数与
trigger
相同,除了事件名称(除非您正在侦听"all"
,这将导致回调接收事件的真实名称作为第一个参数)。
顺便说一句,Backbone的最佳实践是使用listenTo方法,例如:
myView.listenTo(Backbone.history,'route',function(){debugger;})
通过这种方式,您不需要手动清理事件侦听器,而是将其逻辑绑定到视图/模型等。使用它。
相关文章:
- 使用iron路由器服务器路由中的数据渲染模板
- angular ui:ui路由器动态路由和状态
- 如何循环显示来自跟踪路由输出的谷歌地图v3中的标记
- 角度 UI 路由器 - 使用路由传递动态数据
- 主干:从视图类向路由器添加路由
- 余烬路由器 - 确定路由/资源是否为当前路由的子路由
- 主路由器在路由“”的末尾附加一个#"导致dom中引用锚点在Backbone/Require应用程序中不起作用
- 无法使用ExpressJS路由器映射路由文件
- 使用React路由器在路由之间切换
- 跟踪路由在实时地图api V3
- 向Backbone.js路由器添加路由,包括404处理程序
- React路由器-动态路由-通过路由器访问状态对象
- 如何在登录后返回到铁路由器的路由,当点击登录和不同的路由
- Meteor.js iron:路由器服务器路由触发RangeError:最大调用堆栈大小超出
- React路由器通过路由调节
- Angular ui路由器根据路由参数呈现不同的组件
- Angular UI路由器,路由解析刷新按钮
- 使用Backbone.js路由器进行路由而不是使用服务器端代码的原因
- Angular(ui路由器)路由不完全工作?可以't通过基本url直接访问url
- HTML5 pushState冲突w/Angular UI路由器URL路由