【问题标题】:Backbone.js Use View to Manipulate Another ViewBackbone.js 使用视图来操作另一个视图
【发布时间】:2012-04-18 21:09:21
【问题描述】:
我的问题主要是关于 Backbone.js 的概念性问题,但如果我的问题不清楚,我可以模拟一些代码。
假设我在一个网站上有 2 个部分。项目列表作为一个视图和另一个视图,该视图具有一个下拉菜单来选择项目列表的排序方式。显然,项目列表与存储填充列表的实际数据的模型集合相关联。但是我不确定当另一个视图的下拉列表更改时触发集合以不同方式排序的最佳方法。我应该更改集合的实际顺序,还是只按照我想要的顺序呈现视图?
另外,使用下拉列表的模型来跟踪下拉列表的状态,并将项目列表视图绑定到该模型,以便我知道何时重新呈现项目列表是一个好主意吗?
【问题讨论】:
标签:
model-view-controller
backbone.js
【解决方案1】:
你可以在这里走几条路。这里有一些:
- 使用路由器。路由器将保存您的视图,或者至少是顶级视图(更清晰),并且您的下拉视图将触发路由更改,这会将信息传递给视图。如果您想要干净的 URL,最好。
- 在下拉视图中创建指向列表视图的指针。当下拉视图接收到更改事件时,它会明确告诉列表视图进行更新。 (IMO 是一种糟糕的方法,但为了完整起见,在此列出。)
- 用模型支持一切。 (就像您在上一个问题中建议的那样。)下拉视图将由模型支持,并且列表视图可以绑定到该模型的事件。 (同样,列表视图仍然需要了解下拉模型——并不理想。)
- 创建一个事件管理器。当您的下拉菜单收到更改时,您
trigger 'sort' 和任何关心的人都可以收听该事件。这不是一个简单的解决方案,但也不是过于复杂。然后,您的列表视图可以向事件管理器注册其侦听 sort 事件的意图,从而将事件管理器内部的实际视图抽象出来并远离下拉视图。
1 和 4 实际上是同一件事,只是取决于您是否需要路由器。
基本上,我对这类场景的启发是“没有人应该知道它不需要知道的事情”。在这里应用,这意味着您的视图不应该相互了解。