如何在Backbone中正确使用事件

时间:2013-05-22 15:39:00

标签: backbone.js

我正在构建一个三向选择器:公司,部门和用户。

enter image description here

我正试图找出在我的Backbone应用程序中构建它的最佳方法。这是我目前遇到的问题。

假设用户选择了一家公司。然后,将填充部门和用户集合,并且视图将更新:

enter image description here

然后,用户可以从列表中选择一个部门,这将进一步细化用户选择。我工作得很好。

或者,用户可以直接进入用户列表并找到用户(无需先指定部门)。在这种情况下,部门和用户的视图需要更新:

  1. 应该在用户部门选择部门。
  2. 用户应该优化所选用户部门中的所有用户,而不是所选公司中的所有用户。
  3. 我正在努力做到最好的方法。到目前为止,我的departmentsusers个集合都有一个selected属性,这就是我维护状态的方式。目前我正在做类似

    的事情
    • 当用户选择部门时,部门视图
      1. 直接在departments集合
      2. 上设置所选部门
      3. 触发事件
      4. 用户集合会听到事件,清除所有选定的用户,并触发其他事件
      5. 用户视图会听到事件并重新呈现。由于它知道部门集合,因此它知道已经选择了一个部门,并且应该将用户细化到部门

    我这样做是因为如果我让视图只触发事件(没有首先设置部门选择属性),我就会遇到竞争条件:部门和用户集合都会响应事件,并且取决于用户的计时可能没有得到适当的改进。

    第二部分:

    • 当用户选择用户(未指定部门)时,用户视图
      1. 直接在users集合
      2. 上设置所选用户
      3. 直接在departments集合(它知道的)
      4. 上设置所选部门
      5. 触发事件

    这就是我被困住的地方。部门集合实际上不需要做任何事情,因为它的选定属性已经是正确的;实际上,它的视图只需要重新渲染。用户的观点也是如此。

    但这不是全部,因为还有很多其他事情可能发生。我觉得它失控了。

    • 最好的结构是什么?
    • 我是否正确使用活动?
    • 您如何处理需要了解其他观点和其他馆藏变化的观点?

    更新:我应该只使用路由来保存应用程序状态吗?这可能会简化事情......

    更新2: This question对我很有帮助。有一个单独的模型来管理状态肯定是要走的路。

    更新3:拥有一个单独的模型来存储状态+使用jQuery deferreds是惊人的。认真。它完成了我。

1 个答案:

答案 0 :(得分:2)

我发现使用模型跟踪状态很有用。这样,您可以将该模型传递给不同的视图,并且没有直接引用彼此的视图。

您可以在状态模型上使用内置和自定义事件来管理状态转换。

在您的情况下,集合不需要存储selected。相反,selectedUserselectedDepartment可以是州模型的属性。 然后,您可以在模型中使用触发自定义事件的逻辑('update:users:view'或'update:departments:view'),具体取决于所选内容。

我希望这是有道理的。