你能否提供一个jsfiddle来重现你的情况?因为你通常可以做到这一点(我个人有一个应用程序实例化路由器,启动历史记录,实例化其他几个,并且它工作得很好)。 - 当你实例化路由器时,路由绑定到Backbone.history(一个唯一对象)
- 这意味着你不能期望两个路由器执行回调
- 它也意味着有一个固定的顺序:最后一个实例化的路由器的路由将首先被检查
编辑:
好吧,我想你希望两条路线都能执行,因为你希望有人直接进入tab1/stuff。丑陋的方式:你可以停止Backbone.history(Backbone.history.stop()),并在之后启动它,router2的路由将被绑定...
其他可能性:为什么你不把所有的路由放入你的主路由器?好吧,我想如果你真的有太多可以理解的东西。
最后的可能性(我能想到的):使用最后一个路由器的路由首先被测试的事实,这就是你需要的。改变你的主路由器的路由,添加一个通用的路由器,以捕捉你需要的东西(例如tab1)。不要做任何事情,向后导航到/ tab1。准备2个可前往[,像这样:
this.navigate('/tab1', {trigger: true});
this.once('someEvent', function() {
this.navigate('/tab1/stuff', {trigger: true});
});
如果你有足够的通用网址,你可以用你会配合您的通用路由参数取代TAB1 &东西。
编辑2:
确定这里是一个编辑假设一切,我在我的最后评论中写道,并说你哈希标签(或URL),例如查看/动作访问骨干的意见。我会尽我所能地做得更彻底(因为我还没有解决问题的所有细节)。
This jsfiddle显示了原理。现在,仍然存在这样的事实:它会混淆客户的历史(可能有一种方法可以避免在我认为的Backbone中,如果这对您来说是个问题,您必须查看一下)。
现在,事实上可能有其他几个问题。其中最小的可能是辅助路由器中的样板(您必须在任何路由之前放置视图/)。有解决方案,但那会太深入。较大的是以下几点:
我已经说过了,但只有一条路线可以匹配。所以你的主路由器可以用来处理客户端将改变视图的事实(比如从view1/action1到view2/action2,router2已经在之前加载)。 action2将会被执行,但是如果你在你的主路由器上重新载入了你的视图,那就不会这样做了。
作为最后一条评论,您可以在创建主路由器以添加样板行为(重新加载视图?)后修改路由器核心初始化方法:here's an example这可能适合您。
如果您需要一种动态的路径处理方式,并且您的主路由器将决定如何生成这些动态路由,为什么不创建一个正则表达式和回调函数的Backbone集合,用于您的第二条路由并同时通过URL,正则表达式和回调函数到你的主路由器中的一个方法。这通常是如何处理路线的。只是一种方式,我相信有一个更好的方法来做到这一点。 – Kalpers 2013-03-28 11:39:46
嗯,这可能工作,你有任何方法的细节? – adrian 2013-03-28 15:52:32