向Backbone.js路由器添加路由,包括404处理程序
Adding routes to Backbone.js Router including 404 handler
这个问题类似于9595182,它解释了如何以编程方式添加路由。这是伟大的,但我正试图添加一个捕获所有处理程序。当我这样做的时候,所有的路由都是404。
Workspace = Backbone.Router.extend({
routes: {
"help": "help",
"search/:query/p:page": "search",
},
help: function() {
console.log("help");
},
search: function(query, page) {
console.log("search",query,page);
}
});
app = new Workspace();
Backbone.history.start();
//This works
app.route("page/:number", "page", function(number){
console.log("page called! " + number);
});
//This returns a 404 for everything
app.route("*notFound", "page", function(){
console.log("404 error");
});
app.navigate('page/4',{trigger:true});
app.navigate('page/3',{trigger:true});
app.navigate('oohh404',{trigger:true});
这是我的jsfield
您可能已经注意到,route()
函数将一条路由添加到Backbone路由的开头,而不是末尾,这意味着您添加的每条新路由都将在您添加的最后一条路由之前进行检查。具体来说,当你调用route()
时,它最终会调用Backbone.History.route()
它会将路由添加到handlers
数组的开头:
route: function(route, callback) {
this.handlers.unshift({route: route, callback: callback});
},
所以如果你动态添加所有的路由(通过函数),一个"捕获所有"的路由需要首先添加,或者当你定义路由器时,最后在routes
对象中添加。这样做将允许Backbone在到达"捕获所有"路由之前检查每个路由是否匹配,只有当所有其他路由都不匹配时才运行。
但这可能不是你想听到的。如果您真的想要在定义一组路由后将此路由添加到末尾,则需要访问Backbone.History
中的handlers
数组,以代替push
到末尾的新路由,而不是unshift
将其添加到数组的前面。你还需要复制Backbone在其route()
函数中为Backbone. router .
可能不建议这样做,因为您将访问Backbone的内部函数,这些函数将来可能会更改。您可以尝试向主干代码库添加一个特性请求,或者自己做,并发出一个pull请求。
相关文章:
- 可以't让我的if语句处理js中的html表单输入
- keyup事件处理程序更改焦点不适用于快速键入
- 如何使用jquery处理php循环通过元素
- angular.js没有'无法在PhoneGap中处理视图标记
- 包括用于facebook评论框的JavaScript SDK
- Webpack/Rect:遵循egghead.io教程,但出现错误:您可能需要一个合适的加载程序来处理此文件类型
- 提示使用服务器端事件处理程序激活JavaScript
- javascript:如何在antlr生成的Lexer中进行错误处理
- 如何编写一个具有公共标头的批处理
- 在同一个服务工作者中处理service-worker.js有任何影响吗
- 如何处理node.js节点mongodb中的连接和查询队列
- 通过命令行/批处理文件打开页面时,将javascript代码注入Google Chrome
- 如何处理10页以上的静态页眉/页脚
- 将事件处理程序绑定到任何可能的事件
- 通过ajax将坐标传递到php服务器端,并在处理后检索到javascript
- python到“;流“;字典处理
- 查找元素高度,包括边距
- 用于服务器端处理的数据表,包括分页、筛选和搜索
- 向Backbone.js路由器添加路由,包括404处理程序
- AngularJS剑道网格与自定义命令,包括模板不处理事件