我是新来Backbone.js,我试图找出,其中状态变量应该住。我用例:Backbone.js - 在哪里存储状态信息?
我提供了一个阅读界面为一本书的应用程序(我知道,典型的例子,对吧?)。我的模型是Book
和Page
与集合类为每个。应用程序的结构看起来大致是这样的(原谅ASCII的Visio):
+------------+
| Controller |
+------------+
| Views Models
| +--------------+ +----------------+
|-| IndexView |------| BookCollection |
| +--------------+ +----------------+
| |
| +--------------+ +----------------+
+-| BookView |------| Book |
+--------------+ +----------------+
| |
| +--------------+ |
|-| TitleView |-+ |
| +--------------+ | +----------------+
| +-| Page |
| +--------------+ | +----------------+
+-| PageView |-+
+--------------+
也就是说,Controller
实例化和协调两种观点,IndexView
和BookView
,通过模型的支持。该BookView
实例化和协调一组子视图(实际上超过这里显示有)。
状态信息包括:
- 当前图书(指针或ID)
- 当前页面(指针或ID)
- 其他UI状态变量,如是否在页面上的图像是可见是否其他小部件是开放还是关闭等
我的问题是,这个状态信息应该在哪里存在?可能的选项包括:
的模式,这可能是状态感知。这有一定道理,因为他们是用于存储数据和观点可以监听状态的变化,但它似乎并不像这符合预期Backbone.js的模式,并不会总是有意义的(例如,在打开的图像
PageView
应该适用于所有页面,而不仅仅是当前页面)A 特殊单体模型打算保存状态信息。再次,有道理,容易听,所有的观点可以绑定它 - 但再次,这似乎超出标准的MVC。
的意见,谁负责的UI状态 - 但是这需要意见,了解彼此的获得状态信息,这似乎不正确
的控制器,这应该航线国家之间的应用 - 这是有道理的,但它意味着一个稍微奇怪的往返,例如
User selects "Show Images" --> View event listener is called --> View informs Controller --> Controller updates state --> Controller updates View
(而不是简单的User selects "Show Images" --> View event listener is called --> View updates
)
我想在某些方面,这是一个通用的MVC的问题,但我无法让我的头周围。 应用程序的哪些部分应负责保存当前状态?
UPDATE:以供将来参考,我用了一个全球性的单国模型这个问题。该UI流程是这样的:
- 查看UI处理程序做什么,但更新
app.State
- 我的路由器也做什么,但更新
app.State
- 他们展示及反应网址变更 - 意见基本上是专业的意见听取
app.State
上的更改并相应更新
我的应用程序是开源的 - 您可以看到code on Github。这里的相关部分是State model,我已经扩展了它以处理(de)序列化URL的状态。
骨干中没有'Controller' 0.5 – Raynos
嗯,是的,我有一个我叫'Controller'的路由器类。它仍然基本上是为了执行控制器的功能,对吧? – nrabinowitz
不是真的。就经典MVC而言,您应该将'View'视为一个经典的Controller。做骨干时最好不要去尝试和思考经典的MVC。根据你的问题,当前的书进入AppView,当前页面进入Book,其余的进入AppView。 'AppView'是一个**特殊的singleton视图**如果你愿意 – Raynos