Ember.js MVC
Ember.js 框架使用模型-視圖-控制器(MVC)模式的應用架構。許多其它框架和平臺也 使用這個模式,所以你可能會聽說過。雖然這些概念一直是跨平臺的,但實現可能會有 相當大的差異。因此,理解 Ember.js 的 MVC 實現與你熟悉的 MVC 實現有何不同是很 重要的。
MVC 基礎
MVC 模式的目的是分離出關鍵問題,這樣,對象的測試、維護和重用會更容易。
模型 是存放最多應用數據的地方。模型通常是預先指定的,用模式或其它類型的模 板來形式化和優化數據存儲和檢索。它通常被實現為一個數據類型、類或是數據庫表的 形式。一個木星的例子可以是一個 User
,它由 username
和 password
兩個字 符串字段構成。可以創建并存儲許多 User
對象,并且它們通常不負責任何應用邏輯 。
視圖 描述各種各樣應用組件(通常是 模型 的一部分)的表現。視圖是用戶能看 得見并與應用交互的部分。它們可以服從給定系統中任何可行的樣式化,并且不保持永 久的狀態。有許多標記語言(比如 HTML/CSS)和模板語言(比如 Handlebars)可用于 編寫視圖。視圖的一個例子可以是一個用戶編輯頁面的模板,它包含處理創建并樣式化 標簽和編輯用字段的代碼。
控制器 承擔連接起 模型 和 視圖 的任務。它提供應用的業務邏輯,從視圖中 接受輸入并在模型上執行 CRUD 操作。一個控制器會從視圖對象中提取用戶名和密碼, 并與模型對象比較它們,用下一個顯示登入狀態的視圖(也可能是別的什么)替換當前 的視圖。
Ember.js 實現
Ember 提供了多種對象來奠定輕松實現 MVC 功能的基礎。例如:
DS.Model
允許你描述你的應用的數據結構,包括模型之間的關系。Ember.View
封裝 HTML 模板,讓你寫出可重用、易于維護的應用視圖。Ember.ArrayController
使得管理對象列表易如反掌,提供了在內容中迭代的便利方法。- Ember.js 也添加了一種重要的新架構:一個可以在視圖、控制器和數據存儲間調停 的狀態管理器。它可以作為你的應用的映射,并把轉換處理為一個用戶經過它。
所有這些對象都繼承自 Ember.Object
,它提供了諸如綁定支持、觀察者、計算屬性 和繼承這樣的絕妙特性。
與 Ruby on Rails 的區別
一個很普遍的誤解就是 Ember.js 的 MVC 實現一定與 Ruby on Rails 的相似。這是不 正確的。
這個區別的原因就是 Ruby on Rails 是一個服務端框架,而 Ember 是一個客戶端框架 。[1]
Ember 在瀏覽器中運行,所以它可以檢測并相應瀏覽器事件,諸如鼠標點擊、手指點 擊、滾動、按鍵等等。接收這些事件的視圖對象可以把它們呈遞給控制器對象,而控制 器對象可以作用于數據模型來保存變更。客戶端發生的一切都在瀏覽器中,并且 ember-data 關注發送或接受去往或來自服務器 API 的合適數據。
另一方面,Rails 運行在服務器上。照此,它只能通過 HTTP 請求與客戶端通信。服務 器接受 HTTP 請求作為輸入(GET /、POST /user/1 等等),讀取路由并把它映射到控 制器行為,而不是直接從用戶接收事件??刂破髦髸媚P秃鸵晥D模板來構造一個響 應(通常是一個 HTML 文檔形式的)來用 HTTP 返回。用戶總是與一個基本上扁平,基于用戶請求的要求組合的頁面交互。
在構建你的應用程序架構時,牢記這些差異是很重要的。
[1] 雖然在服務器端運行 Ember.js 是可行的,但這超出了本指導的范 疇。
原文鏈接:http://emberjs.torriacg.org/guides/ember_mvc/#toc_ember-js