2012-02-14 110 views
3

我们有一个Backbone.js应用程序,这很正常,因为您可以单击菜单项,获得项目网格,单击网格中的项目,网格隐藏和你看到的表格,你保存或取消表格,表格被销毁,网格显示和更新。backbone.js管理主详细视图和历史记录

它比这个稍微复杂一点,因为应用程序的不同部分可以从特定的表单获得,有时候您可以使用网格 - >表单 - >另一种表单,并且您需要返回到第一个表格然后是网格。它并不是一个真正的向导,它只是一些复杂的形式,我并不想真正将“根视图”或面包屑编码到视图中。

所以我的问题是我无法弄清楚如何将它与Backbone路由器集成。我只用ajax调用就可以了,但我们需要后退按钮功能。我正在看的是拥有一个状态对象或模型,并且有一堆视图,当你点击取消它将销毁表单并弹出前一个视图。

但是,这将不允许使用书签,因为您必须通过浏览应用程序来构建堆栈,以及如果它们没有单击取消(这会销毁视图并弹出堆栈),但是会再次点击你的中间视图,但第三个视图仍然在堆栈中。

我想要做的是有一个URL(我在后端使用MVC所以它会很好地使用控制器/动作/ ID网址)#usergrid/list then#usergrid/list/user/addupdate/3 then#usergrid/list/user/addupdate/3/someothercontroller/someotheraction/4

但是a)我无法弄清楚如何让路由器来适应这一点和b)我将不得不解析在URL之间进行某种划分会很困难的参数,以及c)我可以认为用路由进行划分的唯一方法是基本上指定每个URL的每个可能的变体。

任何有关此事的经验或见解都将非常感激。

回答

0

我偶然发现了完全相同的问题。没有比正则表达式路线 更好的了(它们令人惊讶地被Backbone支持)。也就是说,而不是routes: { 'some-form': '/showThatForm' }使用routes: { new RegExp("(.+?)/some-form$"): 'showThatForm' }或类似的东西。

而且,centralized event dispatcher证明在这个方案中是有用的。

也许,这不是最好的解决方案 - 但它对我来说效果很好。