自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Ember.js MVC

開(kāi)發(fā) 前端 架構(gòu)
Ember.js 框架使用模型-視圖-控制器(MVC)模式的應(yīng)用架構(gòu)。許多其它框架和平臺(tái)也 使用這個(gè)模式,所以你可能會(huì)聽(tīng)說(shuō)過(guò)。雖然這些概念一直是跨平臺(tái)的,但實(shí)現(xiàn)可能會(huì)有 相當(dāng)大的差異。因此,理解 Ember.js 的 MVC 實(shí)現(xiàn)與你熟悉的 MVC 實(shí)現(xiàn)有何不同是很 重要的。

Ember.js 框架使用模型-視圖-控制器(MVC)模式的應(yīng)用架構(gòu)。許多其它框架和平臺(tái)也 使用這個(gè)模式,所以你可能會(huì)聽(tīng)說(shuō)過(guò)。雖然這些概念一直是跨平臺(tái)的,但實(shí)現(xiàn)可能會(huì)有 相當(dāng)大的差異。因此,理解 Ember.js 的 MVC 實(shí)現(xiàn)與你熟悉的 MVC 實(shí)現(xiàn)有何不同是很 重要的。

MVC 基礎(chǔ)

MVC 模式的目的是分離出關(guān)鍵問(wèn)題,這樣,對(duì)象的測(cè)試、維護(hù)和重用會(huì)更容易。

模型 是存放最多應(yīng)用數(shù)據(jù)的地方。模型通常是預(yù)先指定的,用模式或其它類型的模 板來(lái)形式化和優(yōu)化數(shù)據(jù)存儲(chǔ)和檢索。它通常被實(shí)現(xiàn)為一個(gè)數(shù)據(jù)類型、類或是數(shù)據(jù)庫(kù)表的 形式。一個(gè)木星的例子可以是一個(gè) User ,它由 usernamepassword 兩個(gè)字 符串字段構(gòu)成??梢詣?chuàng)建并存儲(chǔ)許多 User 對(duì)象,并且它們通常不負(fù)責(zé)任何應(yīng)用邏輯 。

視圖 描述各種各樣應(yīng)用組件(通常是 模型 的一部分)的表現(xiàn)。視圖是用戶能看 得見(jiàn)并與應(yīng)用交互的部分。它們可以服從給定系統(tǒng)中任何可行的樣式化,并且不保持永 久的狀態(tài)。有許多標(biāo)記語(yǔ)言(比如 HTML/CSS)和模板語(yǔ)言(比如 Handlebars)可用于 編寫(xiě)視圖。視圖的一個(gè)例子可以是一個(gè)用戶編輯頁(yè)面的模板,它包含處理創(chuàng)建并樣式化 標(biāo)簽和編輯用字段的代碼。

控制器 承擔(dān)連接起 模型視圖 的任務(wù)。它提供應(yīng)用的業(yè)務(wù)邏輯,從視圖中 接受輸入并在模型上執(zhí)行 CRUD 操作。一個(gè)控制器會(huì)從視圖對(duì)象中提取用戶名和密碼, 并與模型對(duì)象比較它們,用下一個(gè)顯示登入狀態(tài)的視圖(也可能是別的什么)替換當(dāng)前 的視圖。

Ember.js 實(shí)現(xiàn)

Ember 提供了多種對(duì)象來(lái)奠定輕松實(shí)現(xiàn) MVC 功能的基礎(chǔ)。例如:

  • DS.Model 允許你描述你的應(yīng)用的數(shù)據(jù)結(jié)構(gòu),包括模型之間的關(guān)系。
  • Ember.View 封裝 HTML 模板,讓你寫(xiě)出可重用、易于維護(hù)的應(yīng)用視圖。
  • Ember.ArrayController 使得管理對(duì)象列表易如反掌,提供了在內(nèi)容中迭代的便利方法。
  • Ember.js 也添加了一種重要的新架構(gòu):一個(gè)可以在視圖、控制器和數(shù)據(jù)存儲(chǔ)間調(diào)停 的狀態(tài)管理器。它可以作為你的應(yīng)用的映射,并把轉(zhuǎn)換處理為一個(gè)用戶經(jīng)過(guò)它。

所有這些對(duì)象都繼承自 Ember.Object ,它提供了諸如綁定支持、觀察者、計(jì)算屬性 和繼承這樣的絕妙特性。

與 Ruby on Rails 的區(qū)別

一個(gè)很普遍的誤解就是 Ember.js 的 MVC 實(shí)現(xiàn)一定與 Ruby on Rails 的相似。這是不 正確的。

這個(gè)區(qū)別的原因就是 Ruby on Rails 是一個(gè)服務(wù)端框架,而 Ember 是一個(gè)客戶端框架 。[1]

Ember 在瀏覽器中運(yùn)行,所以它可以檢測(cè)并相應(yīng)瀏覽器事件,諸如鼠標(biāo)點(diǎn)擊、手指點(diǎn) 擊、滾動(dòng)、按鍵等等。接收這些事件的視圖對(duì)象可以把它們呈遞給控制器對(duì)象,而控制 器對(duì)象可以作用于數(shù)據(jù)模型來(lái)保存變更??蛻舳税l(fā)生的一切都在瀏覽器中,并且 ember-data 關(guān)注發(fā)送或接受去往或來(lái)自服務(wù)器 API 的合適數(shù)據(jù)。

Ember.js MVC Diagram

另一方面,Rails 運(yùn)行在服務(wù)器上。照此,它只能通過(guò) HTTP 請(qǐng)求與客戶端通信。服務(wù) 器接受 HTTP 請(qǐng)求作為輸入(GET /、POST /user/1 等等),讀取路由并把它映射到控 制器行為,而不是直接從用戶接收事件。控制器之后會(huì)用模型和視圖模板來(lái)構(gòu)造一個(gè)響 應(yīng)(通常是一個(gè) HTML 文檔形式的)來(lái)用 HTTP 返回。用戶總是與一個(gè)基本上扁平,基于用戶請(qǐng)求的要求組合的頁(yè)面交互。

Rails MVC Diagram

在構(gòu)建你的應(yīng)用程序架構(gòu)時(shí),牢記這些差異是很重要的。

[1] 雖然在服務(wù)器端運(yùn)行 Ember.js 是可行的,但這超出了本指導(dǎo)的范 疇。

原文鏈接:http://emberjs.torriacg.org/guides/ember_mvc/#toc_ember-js

責(zé)任編輯:陳四芳 來(lái)源: emberjs.torriacg.org
相關(guān)推薦

2013-12-24 11:11:27

ember.jsJavascript

2013-12-24 16:03:26

Ember.js視圖

2013-12-24 14:50:39

Ember.js框架

2013-12-20 14:47:23

ember.js

2013-09-10 14:01:40

WebEmber.jsAngular.js

2016-11-14 15:51:42

JavaScriptAngular.jsReact.js

2013-05-30 15:16:26

javaScriptMVC模式

2013-10-16 10:11:35

JavaScript項(xiàng)目框架

2014-03-13 11:22:00

JavaScriptJS框架

2013-12-25 09:53:22

Ember.js應(yīng)用

2013-12-25 10:08:42

ember.js異步處理

2013-12-24 13:20:28

EmberEmber.js

2012-02-09 16:09:17

JavaScript

2012-10-18 10:15:50

IBMdw

2013-03-21 13:56:21

JavaScriptBackBone

2015-05-05 11:12:50

JavaScriptMithril.js

2017-06-28 08:31:11

Node.jsMVC微服務(wù)

2015-02-09 10:43:00

JavaScript

2023-03-15 08:03:31

2024-04-09 16:19:16

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)