Backbone.js 将路由作为事件运行
我有一个用require.js和backbone.js构建的前端javascript应用程序。应用程序的大多数部分使用标准/推荐的构建应用程序的方法,包括使用主干路由器对象进行路由 现在,我想在应用程序的一个部分中添加一些更直观的更改。我不想点击一个链接和路由器渲染另一个视图,我想在这之前做一些视觉上的改变。就像单击链接时发生的GUI效果一样,当该效果完成时,新视图应该像以前一样呈现 我想一种可能的方法是将点击事件挂接到给定的链接,取消正常传播(取消主干对象中的路由捕获),执行可视化操作,然后手动调用路由器或直接渲染视图。然后我需要从视图访问router对象(调用通常捕获单击的操作方法),或者我需要从添加到链接的单击事件中渲染视图,导致渲染代码重复(在事件函数和视图中)Backbone.js 将路由作为事件运行,backbone.js,requirejs,Backbone.js,Requirejs,我有一个用require.js和backbone.js构建的前端javascript应用程序。应用程序的大多数部分使用标准/推荐的构建应用程序的方法,包括使用主干路由器对象进行路由 现在,我想在应用程序的一个部分中添加一些更直观的更改。我不想点击一个链接和路由器渲染另一个视图,我想在这之前做一些视觉上的改变。就像单击链接时发生的GUI效果一样,当该效果完成时,新视图应该像以前一样呈现 我想一种可能的方法是将点击事件挂接到给定的链接,取消正常传播(取消主干对象中的路由捕获),执行可视化操作,然后手
有没有一种既好又整洁的方法可以做到这一点,而不必编写难看的意大利面代码?您可以使用以下代码捕获每个链接上的所有点击,然后执行所需操作:
$(document).on('click', 'a:not([data-bypass])', function (evt) {
var href = $(this).attr('href');
var protocol = this.protocol + '//';
if (href.slice(protocol.length) !== protocol) {
evt.preventDefault();
var rootLength = Backbone.history.root.length - ((Backbone.history.root.substring(Backbone.history.root.length - 1) === '/') ? 1 : 0);
// Here before calling the history.navigate that trigger your router
// routes, do your visual effects
Backbone.history.navigate(href.slice(rootLength), {
trigger: true
});
}
});
我以前没有使用过history.navigate。它解决了我的案子。有点奇怪,它没有包含在主干文档中。。