2010-07-20 21 views
1

我正在考慮在JavaScript中實現MVP - 被動視圖模式。在大多數情況下,視圖將是簡單的dom元素,其中演示者附加事件監聽器。但是,當涉及基於JavaScript的僞選擇框,自動建議或詠歎調功能等小部件時,它應該是JavaScript視圖類的一部分,還是應該改變視圖的邏輯成爲演示者的一部分? 我看過javascriptMVCs view,它似乎只是模板生成的HTML沒有任何邏輯。但對我來說,聽取html選擇框的演示者和使用javascript邏輯監聽僞選擇框來模仿真實選擇框的演示者似乎沒有什麼不同。兩人都不應該在乎盒子是如何在內部工作的,他們只需要聽取更改事件。JavaScript中的被動視圖

那麼你怎麼想。什麼是視圖類的工作。

回答

1

該視圖的工作是作爲視圖技術的adapter。在這種情況下,您的視圖技術可能是通過JavaScript的HTML over jQuery。該視圖的設計應做三兩件事:

  • 知道事件發生時,並傳達這些事件來演示(這可能是間接的,使用像postal.js一個消息框架)
  • 告訴主持人(當記者問)「x」的值是多少,其中x是視圖中表示的值。
  • 接受來自演示者的消息(通常通過直接方法調用)以更改視圖上的值。

被動視圖模式中的視圖是非有狀態。我再說一遍,一個視圖並不代表狀態。我的意思是,所有狀態和狀態轉變的知識都由主持人代表。該視圖只是提供演示者與實際視圖技術之間間接性的粘合劑。 除了以上三點,它並沒有包含任何有關如何處理它包含的信息的知識。這很重要,因爲你永遠不應該期望視圖處於一致的狀態。您應該始終讓主持人負責管理視圖的狀態。

enter image description here

上面堆疊演示如何我預見模型,視圖和演示進行交互,以及它們到視圖技術和控制器的關係。

  • 瀏覽器,HTML,和DOM(通過jQuery的管理)是視圖技術。這些內在複雜,並且不能代表你的模型。
  • 查看保護您的邏輯從查看技術。它提供間接性,以便您可以專注於演示者中的普通舊代碼。視圖應該使用某種消息傳遞以便與主講者進行通信。這可以防止視圖和演示者之間的雙向依賴關係。它還允許多個演示者操縱視圖。
  • 主持人應負責瞭解視圖的抽象性,並根據其接口的視圖上模型的狀態應該管理。它能夠理解如何從控制器檢索型號,以及如何將型號保留回服務器。
  • 模型特定時間點的狀態表示。它也可以作爲控制器發言人之間的DTO。在JavaScript中,將演示者行爲簡單地添加到模型上很容易,有時更可取。
  • 控制器協調應用程序內的導航,並負責從演示文稿中提取後端服務。
2

View對象應該負責繪製自己。被動查看知道如何做東西,而不是什麼要做。它必須負責發射自己的事件。僅僅因爲它是一個自定義選擇框小部件並沒有使其與常規選擇框不同。

如果主持人接管了所有的觀點責任,那麼根本就不需要觀點。也許只是有一個主持人。

+0

是否繪製了自己,包括在用戶交互中改變樣式或屬性還是屬於演示者的這一部分? – 2010-07-21 11:01:06

1

JavaScriptMVC的視圖是虛擬客戶端模板。它是節點控制器傾向於承擔更傳統的視圖角色。