Ember.js 目前非常流行的H5框架

8gw234 9年前發布 | 61K 次閱讀 Ember.js JavaScript開發

Ember.js是一個MVC的JavaScript框架,由Apple前雇員創建的SproutCore 2.0改名進化而來,號稱「A framework for creating ambitious web applications」。
Ember.js 目前非常流行的H5框架

簡介

Emberjs——一個用于創建 web 應用的 JavaScript MVC 框架,采用基于字符串的Handlebars模板,支持雙向綁定、觀察者模式、計算屬性(依賴其他屬性動態變化)、自動更新模板、路由控制、狀態機等。

Ember使用自身擴展的類來創建Ember對象、數組、字符串、函數,提供大量方法與屬性用于操作。

每一個Ember應用都使用各自的命名空間,避免沖突。

Ember采用可嵌套的視圖層,使視圖變得有層次。

核心概念
上手Ember.js,必須先理解幾個核心概念。

我們希望開發者能夠建立雄心勃勃的、與原生應用抗衡的大型web應用,要做到這一點,必須擁有先進的工具和正確的概念,以幫助開發者進行溝通協作。

我們耗費了大量時間去參考原生應用框架的思想,比如Cocoa,但是那些概念不僅沒能形成幫助,反而還成為了一種障礙,而且,有些概念確實也并不適合 web開發的特征。于是我們轉去向其他一些流行的開源項目尋找靈感,比如Ruby on Rails以及Backbone.js。

因此,Ember.js是一個綜合體,它結合了原生應用的強大,且兼具現代網絡的輕量與敏捷。

概念
模板 TEMPLATES
Ember.js使用Handlebars模板引擎定義應用程序的用戶界面,模板里可以包含HTML以及以下內容:

表達式(Expressions):比如{{firstname}},用來提取控制器或者模型中的信息,將之轉換成HTML,并且保持自動更新。

插口(Outlets):給其他模板預留的占位符,當用戶操作應用程序的時候,路由器可以控制不同的模板接入到插口的位置。通過{{outlet}}標記可以在模板里創建插口。

視圖(Views):負責處理用戶事件,通過{{view}}標記在模板里創建。

視圖 VIEWS
嵌入在模板里的視圖負責將原始事件(比如點擊、手勢、滑動)轉換成應用里定義的事件,并將事件發送給控制器。

比如,視圖可以將click事件轉換成更有意義的deleteItem事件,并發送給控制器。如果控制器沒有實現deleteItem事件,則事件會發送給當前的路由器。

控制器 CONTROLLERS
控制器儲存應用程序狀態,模板用來連接控制器,并將控制器的當前狀態轉換成HTML。

控制器通常用來為模板描述模型,在這種情況下,控制器將模型的屬性傳給模板,并以模板期望的方式修改或增加模型。

模型 MODELS
模型用來處理持久化的數據,比如在應用程序中由用戶賦值的數據。模型對象一般由服務器加載,當客戶端做出修改的時候,再存回服務器。

通常來說,數據可以轉換為JSON格式由服務器傳遞給Ember.js的模型,實現關聯、屬性計算,以及其他一些功能。

路由器 ROUTER
路由器負責管理應用程序的狀態。

當用戶啟動應用程序,它會檢查URL,確保載入正確的模板進行展示,并為模板解析相應的模型對象。

當應用程序在運行到不同狀態時,路由器會自動更新URL,用戶可以保存URL,以便返回之前的一些狀態,或者通過URL與其他用戶分享當前頁面。

上面這些就是開發Ember.js應用程序需要了解的核心概念。我們設計的系統支持復雜的擴展,如果你能遵循這些基本內容,在增加新功能的時候就不必回溯整個系統。

我們認為,讓多個開發者通過框架的模式,對一個問題在解決方式上達成一致是很重要的。現在已經解釋了一些基本對象所扮演的角色,接下來就要深入Ember.js,了解各個部分的細節和工作方式。

使用

創建一個應用程序
創建Ember.js應用程序的第一步是創建一個Ember.Application類的實例化對象:

window.App = Ember.Application.create();

里將實例化的對象命名為App,開發者可以根據應用程序的用途,選擇意義相符的名字。

創建一個應用程序的實例對象非常重要,原因如下:

定義應用程序的命名空間,所有類都定義成該對象的屬性(比如App.PostsView、App.PostsController)。這樣做可以避免污染全局作用域。

在document上增加事件監聽,并負責將事件發送給視圖。

自動渲染模板,包括根模板,以及其他放入根模板的模板,都將被渲染。

基于當前URL創建路由器并開始路由。
應用程序模板
應用程序模板是應用程序啟動時被渲染的默認模板,模板內應該包含header、footer以及其他一些修飾內容。另外,還應該包含至少一個{{outlet}}占位符,路由器會根據應用程序的狀態,在這里插入相應的模板。

例:

<header>
  <h1>Igor's Blog</h1>
</header>

<div>
  {{outlet}}
</div>

<footer>
  &copy;2013 Igor's Publishing, Inc.
</footer>

header和footer會保持不動,而div里的內容會被改變,比如用戶將URL路徑定位到/posts或/posts/15,div里的內容就會做出相應變化。

如果在HTML里保存模板,可以創建一個匿名的script標簽,它將會被自動調用到屏幕上。

<script type="text/x-handlebars">
  <div>
    {{outlet}}
  </div>
</script>

如果使用工具加載模板,一定要給模板命名為application。

獲取

官網:http://emberjs.com/
中文文檔:http://xbingoz.com/emberguides/0.php 志愿者翻譯

 本文由用戶 8gw234 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!