Backbone 应用程序中嵌套表单视图的架构

Posted

技术标签:

【中文标题】Backbone 应用程序中嵌套表单视图的架构【英文标题】:Architecture for nested form view in Backbone app 【发布时间】:2014-05-10 23:30:58 【问题描述】:

我是 Backbone.js 的新手,我正在开发一个 Backbone 应用程序,在如何构建我的视图方面遇到了一些难题。

基本上我想要的是:一个显示模型列表的视图,以及一个在该列表顶部动画以创建新模型的表单。棘手的是,我希望我的表单看起来与没有表单的状态不同。

所以我希望我的应用程序在路由 / 中看起来像这样:

 _________________________________
|                                 |
|  - Item one                     |
|  - Item two                     |
|  - Item three                   |
|  - Item four                    |
|  - Item five                    |
|_________________________________|

对于路线/new

 _________________________________
|                     |           |
|  - Item one         |  [Form]   |
|  - Item two         |           |
|  - Item three       |           |
|  - Item four        |           |
|  - Item five        |           |
|_____________________|___________|

当用户在这两种状态之间切换时,侧边栏/表单的动画进出。

您建议我如何处理这些视图/路由的架构?

在我当前有缺陷的实现中,我有一个视图来表示所有这些(表单被 css 隐藏),路由 /new 触发一个 jQuery 动画来显示表单。问题是/new 依赖于用户之前访问过/,因为它依赖于已经在/ 中呈现的视图。直接访问这个 url 会被破坏,因为视图还没有被渲染。

在我看来,简单的解决方案是让列表和列表+表单成为两个单独的视图。这似乎效率低下,因为当用户从/ 导航到/new 时,必须重新构建和呈现列表,即使它已经在屏幕上就好了。这种重新渲染也会使两种状态之间的动画变得不可能。

我的直觉告诉我,这个问题有一个优雅的 Backbonian 解决方案,或者至少是一个丑陋的解决方案,可以完成工作,而不会破坏我的应用程序的 url。

谢谢!

【问题讨论】:

【参考方案1】:

您是否查看过 Backbone.js 集合。根据我的理解,路由(/和/new)中的两个视图之间的区别在于,一个在集合视图中具有额外的形式。

因此,您可以做的是,使用 Backbone 模型来表示和项目,并使用视图进行设计。然后使用 create a Backbone Collection [2] 来包装模型。

然后为同一个集合定义两个不同的集合视图。 [3] 使用主干路由,您可以将两个不同的集合视图呈现给这两个 URL。

[2]http://backbonejs.org/#Collection

[3]http://rotundasoftware.github.io/backbone.collectionView/

请参阅以下简单架构视图了解解决方案。

【讨论】:

以上是关于Backbone 应用程序中嵌套表单视图的架构的主要内容,如果未能解决你的问题,请参考以下文章

在 Backbone.js 的显示视图中嵌套创建视图

如何使用backbone.js 路由器切换视图?

需要帮助理解主干中嵌套视图的基础知识

在 Backbone 应用程序中,按照惯例,模型、视图和集合的工作是啥

如何使用 Backbone.Js 创建嵌套模型

使用助焊剂时的表单验证