我已经开发大型 Backbone Marionette 应用程序大约一年了。一直具有挑战性的一件事是传递路线中视图状态的选项。视图状态选项的示例是活动选项卡、临时选择的项目或页面上需要可链接的排序选项。
在更新到 Backbone 0.9.9+ 之前,我发现处理这些情况的最佳方法是将查询参数添加到路由的末尾。我的路由器看起来像这样:
"/questions/:id/" : "showQuestions"
"/questions/:id/?*params" : "showQuestionsWithFilters"
这将匹配如下内容:
"/questions/1/?search=help&sort=name"
我发现这样做的真正优势是路由器将根据 url 参数的存在匹配不同的路由。清除所有url参数,然后触发导航,实际上会导致路由改变。
在 Backbone 0.9.2 之后,路由器不再识别 url 参数。在上面的示例中,无论是否存在 url 参数,都会触发“showQuestions”方法。这个 GH 问题的普遍共识(https://github.com/documentcloud/backbone/issues/891)和 Backbone 贡献者的意见似乎是 url 参数根本不应该在客户端使用,而是全部需要传递给视图的信息应存储在主 url 路径(https://github.com/documentcloud/backbone/issues/2440)中。
使用此方法的路由器可能类似于:
"/questions/:id/(search/:term)(sort/:type/)"
这种方法的问题是每个可选参数都需要显式添加到路由器,并且所有参数必须相应地排序,否则它们将不匹配。因为路由和它的选项之间没有轮廓线,并且顺序是由路由器决定的,所以动态添加或编辑选项似乎是不必要的困难。
在这一点上,我被困在保持我当前的 url 结构和试图找出一种让它工作的方法或迁移到后一种方法之间。在我朝任何一个方向走得太远之前,我想知道是否对类似用例的最佳实践还有其他意见。你会推荐什么?