gpt4 book ai didi

javascript - 将路由添加到 Backbone.js 路由器,包括 404 处理程序

转载 作者:行者123 更新时间:2023-11-30 17:25:41 28 4
gpt4 key购买 nike

这个问题类似于9595182这解释了如何以编程方式添加路由。这很好,但是我正在尝试添加一个 catch all 处理程序。当我这样做时,我会得到所有路线的 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});

这是我的 jsfiddle

最佳答案

您可能已经注意到,route()函数将路由添加到 Backbone 路由的开头,而不是末尾,这意味着您添加的每条新路由都将在您添加的最后一条路由之前进行检查。具体来说,当您调用 route()它最终调用了 Backbone.History.route()哪个adds the route to the beginning of it's handlers array :

route: function(route, callback) {
this.handlers.unshift({route: route, callback: callback});
},

因此,如果您动态添加所有路由(通过函数)或在 routes 中最后添加,则真正需要首先添加“包罗万象”的路由定义路由器时的对象。这样做将允许 Backbone 在到达“捕获所有”路由之前检查每条路由是否匹配,只有当所有其他路由都不匹配时你才想运行。

但这可能不是您想听到的。如果您真的想在定义一组路由后将此路由添加到末尾,则需要访问 handlers Backbone.History 内的数组改为 push一条通往终点的新路线,而不是unshift把它放到数组的前面。您还需要复制 Backbone 完成的功能 in their route() function for Backbone.Router .

虽然这可能不被推荐,因为您将访问 Backbone 的内部功能,这在未来可能会发生变化。您可以尝试向 Backbone 代码库添加功能请求,或者自己动手并发出拉取请求。

关于javascript - 将路由添加到 Backbone.js 路由器,包括 404 处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24328820/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com