《Ember.js实战》——1.3 Ember.js概览

1.3 Ember.js概览

Ember.js起源于SproutCore框架的第二个版本。在SproutCore 2.0开发期间,SproutCore团队成员已经清楚地认识到,如果想要创建满足目标广泛的Web应用程序的需要,并且体积还保持小巧的易用框架,SproutCore框架的底层结构就需要有个根本改变。

SproutCore简介

SproutCore是一个用高度面向组件编程模型开发出来的框架。SproutCore的大多数概念都是从Apple的Cocoa借鉴来的,而Apple也使用SproutCore 来构建它的一些Web应用(MobileMe和iCloud)。同时,Apple还贡献了大量代码给SproutCore项目。2011年11月,Facebook得到了该项目团队并负责维护SproutCore。
最后,核心团队的部分成员决定从SproutCore分离出来,创建一个新的框架来实现这些改变。

Ember.js借鉴了SproutCore大量的底层结构和设计。但SproutCore为了创建桌面风格的应用程序,通过对开发者隐藏大部分实现细节来费力提供端到端解决方案,与此不同,Ember.js力求让开发者明白HTML和CSS才是开发栈里的核心。

Ember.js的优势在于能够让你以一致而可靠的模式组织JavaScript源代码,同时还保持着HTML与CSS代码的易见性。此外,不强制依赖特定工具来开发、构建及装配应用程序,给开发者更多的选择控制权来组织开发过程。在装配及打包应用程序时,有许多可靠的工具供选择。第11章将介绍一些有效的打包选项。

你迫不及待地想开始Ember.js编码了?但在创建你的第一个Ember.js应用程序之前,还是先来了解下Ember.js及其应用结构吧。

1.3.1 Ember.js特性
按照Ember.js官网①上的说法,Ember.js是一个帮助你构建“雄心勃勃”Web应用的框架。“雄心勃勃”这个词对不同的人可能有不同理解,但有一点是众所周知的,Ember.js的目标是挑战Web开发的极限,同时确保源代码的结构化和健壮性。

Ember.js将应用结构封装为逻辑抽象层,并强制尽可能采用面向对象开发模式,以达成其目标。其内置支持以下核心特性。

  • 绑定——双向绑定的变量值将相互影响和更新。
  • 计算属性——将方法标识为属性,并自动随其所依赖属性变化而更新。
  • 自动更新模板——无论底层数据何时更改,始终确保界面处于最新状态。

将以上特性与强大而优良的MVC架构结合起来,你就获得了一个众望所归的Ember.js框架。

1.3.2 Ember.js应用程序结构
如果你曾经花费了大量时间通过服务器端生成标记及JavaScript代码来开发Web应用程序,Ember.js——一个全新亮相的JavaScript框架——其应用结构完全不同于旧有做法。

Ember.js包含了完整的MVC实现,MVC架构强化了控制器层和视图层。随着本章内容的推进,我们将涉及更多的MVC实现细节。

  • 控制器层——构建路由与控制器的结合逻辑。
  • 视图层——构建模板与视图的结合逻辑。

注意
 第5章介绍的Ember Data,将充当Ember.js的模型层。
构建Ember.js应用程序时,开发者会对应用按一致而结构化的原则进行划分。可以花点时间考虑下放置应用逻辑的最佳位置。尽管这种方式要求在编码之前先仔细思考,但却能保证产品最终具有更好的结构,也就意味着程序易于维护。

大多数情况下,你将遵循Ember.js的指导原则和约定惯例,但有些情况下还需要花一些时间采取特别的方式来实现更复杂的应用功能。

如图1-6所示,Ember.js在标准MVC模型的各层之上引入了额外的概念,本书前5章会介绍这些概念。

记住这张图,我们来具体了解一下每个MVC组件。

1.模型与Ember Data
在图1-6的底部,Ember.js通过Ember Data来简化应用程序,Ember Data提供了创建富Web应用所需的大量数据-模型特性,其描绘了一种跟服务器端通信的可行实现方式。其他库也具备这种功能,你可以编写或引入你自己的客户端-服务器端通信层。Ember Data将在第5章中详细介绍,并在第6章介绍如何整合你自己的数据层。

模型层通常以半严格模式指定的方式来保存应用数据。模型层负责服务器端通信以及模型特有任务如数据转换。视图可以通过控制器绑定界面组件到模型对象属性。

Ember Data在模型层发挥作用,用来定义模型对象和客户端到服务器端的API,以及Ember.js与服务器端的传送协议(jQuery、XHR、WebSockets及其他)。

2.控制器与Ember路由器
在模型层之上是控制器层。控制器的主要作用是担当模型与视图之间的纽带。Ember.js附带了几个自定义控制器,最主要的是Ember.ObjectController和Ember.ArrayController这两个控制器。通常,当控制器描述单一对象时(如选择一条事项)使用ObjectController;而在控制器描述项目数组时(如列出当前用户所有有效事项)使用ArrayController。

在此之上,Ember.js通过路由器把应用程序分割为清晰界定的逻辑状态。每个路由可以有多个子路由,使用路由器在应用程序的不同状态间导航。

Ember路由器同时也是Ember.js用于更新应用程序URL以及监听URL变化的机制。使用Ember路由器的时候,将以类似状态图的层级结构来模型化所有应用状态。第3章将涉及Ember路由器的内容。

3.视图与Handlebars.js
视图层负责绘制界面元素。视图通常不保存自身永久状态,但也有极少例外。默认情况下,Ember.js中的每个视图都有一个对应的控制器作为其上下文。视图通过控制器获取数据,默认情况下,使用这个控制器来处理任何对该视图进行的用户操作。

同样是在默认情况下,Ember.js使用Handlebars.js作为其模板引擎。所以,大多数Ember.js应用程序通过Handlebars.js模板来定义用户界面。一个视图使用一个模板来渲染。第4章会介绍Handlebars.js和模板。

Handlebars.js

Handlebars.js基于Mustache,包括JavaScript在内的许多编程语言中都能看到无逻辑模板库Mustache的应用。Handlebars.js在Mustache之上添加了逻辑表达式(if、if-else、each等)。这样,随着可以将模板绑定到视图与控制器的属性上,开发者就能够为Ember.js应用构建逻辑清晰且可定制的结构化模板。
Ember.js附带了支持HTML5基本元素的默认视图,在处理简单元素时这些视图是非常合适的。而在构建Web应用复杂元素时,无论是扩展还是结合标准Ember.js视图,都能够很容易地创建出属于自己的自定义视图。

现在你了解了Ember.js应用程序结构,接下来开始编写你的第一个Ember.js应用。

时间: 2024-08-30 03:40:37

《Ember.js实战》——1.3 Ember.js概览的相关文章

《Ext JS实战》——1.3 框架概览

1.3 框架概览 Ext JS作为一个框架,不仅提供了UI部件,还提供了许多其他特性.这些内容可以分成6大部分,即Ext JS核心.UI组件.Web远程调用.数据服务.拖放以及通用工具.图1-4说明了这6个部分. 图1-4 Ext JS的6大部分,即Ext JS核心.UI组件.Web远程调用.数据服务.拖放及通用工具 了解这6大部分之间的区别以及各自的用途,有助于开发应用程序时划分边界,因此下面先讨论这6个部分. Ext JS核心 第一个功能集就是Ext JS核心,这一部分包括了许多基本功能,包

《Ember.js实战》——1.4 第一个Ember.js应用程序:记事本应用

1.4 第一个Ember.js应用程序:记事本应用 记事本应用大约有200行程序代码(包括模板和JavaScript代码)以及130行CSS代码.你完全可以在Windows.Mac以及Linux等各种操作系统上使用你喜爱的编辑器来开发并运行这个应用. 提示 我使用JetBrains WebStorm来编写JavaScript应用,但这对你来说不是必需的. 你将通过编写一个简单的记事本Web管理应用来一探Ember.js.该应用功能如下. 添加新事项--应用提供了用户添加事项的专用区域. 选择.查

《Ember.js实战》——2.2 自动更新模板

2.2 自动更新模板 Ember.js默认使用Handlebars.js模板引擎.Ember Handlebars实现的一个关键点是无论何时将模板与底层数据联系起来,Ember.js都会在应用各层之间创建双向绑定.在第1章记事本应用程序开发过程中你已经了解了相关工作机制. 思考一下代码清单2-2里的notes/note模板代码. 代码清单2-2 重访notes/note模板 这个示例中包含了两种绑定,第一种是通过Handlebars表达式实现模板绑定:第二种是通过Binding关键字在自定义视图

WKWebView与Js实战(OC版)

前言 上一篇专门讲解了WKWebView相关的所有类.代理的所有API.那么本篇讲些什么呢?当然是实战了! 本篇文章教大家如何使用WKWebView去实现常用的一些API操作.当然,也会有如何与JS交互的实战. 如果还没有阅读过WKWebView精讲(OC版),请先阅读,不然有可能看不懂下面所讲的内容. 效果图 通过本篇文章,至少可以学习到: OC如何给JS注入对象及JS如何给IOS发送数据 JS调用alert.confirm.prompt时,不采用JS原生提示,而是使用iOS原生来实现 如何监

《Ext JS实战》——第1章 独特的框架 1.1 认识Ext JS

第一部分 Ext JS介绍 欢迎阅读<Ext JS实战>,本书是对Ext JS世界的深度之旅.在本书中,不仅要学习如何利用Ext JS框架完成各种任务,还会学习构成框架的各种组件和部件之间的差异. 通过第1章到第3章的学习,我们能够对框架的基础部分有必要的理解.我们的旅途从第1章正式起航,在第1章会学习框架的基础知识.第2章是"热身"章,会了解一些能让应用程序正确运行的关键要素.第3章会涉及框架的一些内部机制,例如组件模型和容器模型. 学完这一部分后,就可以探索Ext JS

《Ext JS实战》——1.5 下载并配置

1.5 下载并配置 尽管下载Ext JS的过程简单,可配置一个使用Ext JS的页面却不像在HTML中引用一个文件那么简单.除了配置之外,还得了解目录的层级关系,要知道都有哪些目录以及它们的用途. 我们要做的第一件事就是得到源代码. 下载的SDK是个ZIP文件,差不多有6MB大小.后面会解释为什么这些文件会这么大.现在,把这个文件解压到一个用于专门保存JavaScript的地方.要使用Ajax,需要有一个Web服务器.我在自己的计算机上一般会配置一个本地的Apache,它是个免费的而且跨平台的W

Node.js 日志处理模块log4js_node.js

log4js 是 Node.js 日志处理中的数一数二的模块.比起 console 或者 TJ 的 debug 有其优势,尤其针对投入生产的 Node.js 项目来说下面这些是不可少的: 日志分级 日志分类 日志落盘 本文将会给你一个 log4js 的全面介绍,让你可以在项目中驾轻就熟的使用 log4js,开发调试容易,线上更好地监控或排查问题. 牛刀小试 下面这三行代码为你展示了 log4js 最简单的用法: // file: simplest.js var log4js = require(

Backbone.js系列教程一 - Backbone.js简介

JavaScript在web应用程序开发前端技术和后端技术的逻辑与运行一块占有越来越大的比重.为了帮助维护和循环访问前期逻辑和模块性,MVC模式在近几年中渐渐普及.其中一种运用广泛的MVC框架就是Backbone.js. Backbone中的Models(模型).Views(视图)和Controller(控制器) Backbone.js包含以下几个主要功能: 创建模型(以及模型集合): 创建视图: 管理绑定,管理事件兼用不同的模型以及视图与框架其他部分的联系: 在模型中使用观察者模式,一旦模型触

javascript-jsp中嵌入了js,我如何将js中定义的变量保存一个星期,就类似于计数器之类的变量

问题描述 jsp中嵌入了js,我如何将js中定义的变量保存一个星期,就类似于计数器之类的变量 我要怎么让我的三维数组temporary保存一个星期,并且值不会每次一刷新页面就重置,然后要把值传回给action层 解决方案 js中如何判断一个变量未定义js判断一个变量是否定义的方法 解决方案二: window.onload=function(){ var temporary = new Array(); for(var i=0;i<6;i++){ temporary[i] = new Array(