我是新來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