Ember 是一个旨在创建非凡web应用的JavaScript框架,它消除了样板(boilerplate)并提供了标准的应用程序架构。
消除样板
每个web应用中都会有些常规的任务。例如,从服务器取数据、将数据渲染到屏幕、然后当数据变更时更新信息。由于浏览器能够提供的完成该任务的工具太过原始,致使你一遍一遍地书写相同的代码。Ember.js提供的工具可以让你专注于你的app,而不是重复地编写已经写过无数次的代码。因为我们自己已经创建过数十个应用,我们已经远远超越了明显低级的事件驱动(event-driven)的抽象概念,消除了大量贯穿于应用当中的、与传播变化相关联的样板,尤其是DOM本身。为了帮助你管理视图(view)中的变更,Ember.js内置了一个模板引擎,当底层的对象发生改变时它可以自动地更新DOM。与其他任何的模板系统类似,模板初始渲染时会影响到person的当前状态。然而,为了避免样板,当person的name更新时Ember.js也会为你自动更新DOM。一次性指定模板,Ember.js就会确保它实时更新。
提供架构
由于web应用是由web页面演变而来,其不过是静态文档而已,浏览器已赋予你充分的能力去做任何想做的事。Ember可以让你很容易地将应用划分为模型(models),视图(views)和控制器(controllers),从而提高了可测性,使代码更加模块化,并且帮助项目中的新手快速理解各部分的结合原理。意面式的回调(callback spaghetti)时代结束了。Ember同样提供了内置的对状态管理的支持,从而可以描述你的应用程序在各种不同的嵌套状态(比如登入登出,浏览文章,查看评论)间的流转。
Ember.js 有何不同?
传统的web应用迫使用户在每次与服务器交互时都得下载一个新页面。这意味着每次交互的时间不可能比你到用户之间的延时更快了,并且往往更慢。使用AJAX替换页面中的一些部分,在一定程度上起到了作用,但是在每次UI需要更新时,仍然需要一次到服务器的往返。并且如果页面中的许多部分需要同时更新,绝大部分开发者又会采取重新载入页面的方式了,因为若想保持每个部分都同步还真是个技术活。与一些其他的现代JavaScript框架类似,Ember.js的工作方式略有不同。Ember.js应用会在页面初始载入时将所需全部加在,而不是将大多数应用逻辑存放于服务器端。这意味着当用户使用你的app时,她完全不必载入新页面,并且你的UI会快速响应交互操作。这种架构的一个优点就是,你的web应用与本地(native)应用或者第三方客户端使用相同的REST API。后端开发者可以专注于构建一个快速,稳定,安全的API服务器,并且也不需要前端经验。
Ember.js 概览
三个法宝让你快乐地使用Ember:
- 绑定(Bindings)
- 计算属性(Computed properties)
- 自动更新模板(Auto-updating templates)
绑定
使用绑定可以使两个不同对象的属性保持同步。你只需一次性声明绑定,然后Ember就会确保变更的双向传播。绑定允许你以MVC(Model-View-Controller)模式架构你的应用,然后即可高枕无忧了,数据将永远正确地在层与层之间流动。
计算属性
计算属性非常有用,因为它可以像其他任何属性一样与绑定一起使用。许多计算出的属性依赖于其他属性。许多计算出的属性依赖于其他属性。
自动更新模板
模板是可感知绑定(bindings-aware)的。意思就是如果你改变了已经告知我们需要显示的属性值,我们会为你自动更新。并且由于你指定了依赖关系,对那些属性的更改也会体现出来。
这三个强大的工具是如何配合工作的:从一些原始的属性开始,然后使用计算属性构造一些更复杂的属性及其依赖关系。一旦你描述出数据,就只需要一次性指明数据是如何显示的,然后Ember即可帮你完成其余的任务。底层数据是如何改变的并不重要,不管是从XHR请求还是用户执行操作,你的用户界面总会保持实时更新。这消除了一大类开发人员每天为之挣扎的边缘情况。
更新日志
- #15015 Allow mounting routeless engines with a bound engine name
- #15078 [DEPRECATION] Deprecate EventManager#canDispatchToEventManager.
- #15085 Add missing instrumentation for compilation/lookup phase
- #15150 [PERF] Cleanup Proxy invalidation tracking.
- #15168 [BUGFIX] Ensure that retrying a transition created with replaceWith causes a history replacement.
- #15148 [BUGFIX] Ensure that using replace with refreshModel works properly.
- #15178 Refactor route to lookup controller for QPs.
- #15129 Fix access to service:-document in ember-engines
下载
本站原创,转载时保留以下信息:
本文转自:深度开源(open-open.com)
原文地址:http://www.open-open.com/news/view/3f128516
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/11985.html