Ember.Js v2.8.1 发布,一个JavaScript框架

jopen 8年前
   <p style="text-align: center;"><img alt="" src="https://simg.open-open.com/show/57a8ec1a6926357fef951dcf6a716756.png" /></p>    <p> </p>    <p>Ember 是一个旨在创建非凡web应用的JavaScript框架,它消除了样板(boilerplate)并提供了标准的应用程序架构。</p>    <p style="text-align: center;"><img alt="" src="https://simg.open-open.com/show/3904d750c9356b7f415fe7a3a9a1765e.png" /></p>    <p> </p>    <h2>消除样板</h2>    <p>每个web应用中都会有些常规的任务。例如,从服务器取数据、将数据渲染到屏幕、然后当数据变更时更新信息。由于浏览器能够提供的完成该任务的工具太过原始,致使你一遍一遍地书写相同的代码。Ember.js提供的工具可以让你专注于你的app,而不是重复地编写已经写过无数次的代码。因为我们自己已经创建过数十个应用,我们已经远远超越了明显低级的事件驱动(event-driven)的抽象概念,消除了大量贯穿于应用当中的、与传播变化相关联的样板,尤其是DOM本身。为了帮助你管理视图(view)中的变更,Ember.js内置了一个模板引擎,当底层的对象发生改变时它可以自动地更新DOM。与其他任何的模板系统类似,模板初始渲染时会影响到person的当前状态。然而,为了避免样板,当person的name更新时Ember.js也会为你自动更新DOM。一次性指定模板,Ember.js就会确保它实时更新。</p>    <h2>提供架构</h2>    <p>由于web应用是由web页面演变而来,其不过是静态文档而已,浏览器已赋予你充分的能力去做任何想做的事。Ember可以让你很容易地将应用划分为模型(models),视图(views)和控制器(controllers),从而提高了可测性,使代码更加模块化,并且帮助项目中的新手快速理解各部分的结合原理。意面式的回调(callback spaghetti)时代结束了。Ember同样提供了内置的对状态管理的支持,从而可以描述你的应用程序在各种不同的嵌套状态(比如登入登出,浏览文章,查看评论)间的流转。</p>    <h2>Ember.js 有何不同?</h2>    <p>传统的web应用迫使用户在每次与服务器交互时都得下载一个新页面。这意味着每次交互的时间不可能比你到用户之间的延时更快了,并且往往更慢。使用AJAX替换页面中的一些部分,在一定程度上起到了作用,但是在每次UI需要更新时,仍然需要一次到服务器的往返。并且如果页面中的许多部分需要同时更新,绝大部分开发者又会采取重新载入页面的方式了,因为若想保持每个部分都同步还真是个技术活。与一些其他的现代JavaScript框架类似,Ember.js的工作方式略有不同。Ember.js应用会在页面初始载入时将所需全部加在,而不是将大多数应用逻辑存放于服务器端。这意味着当用户使用你的app时,她完全不必载入新页面,并且你的UI会快速响应交互操作。这种架构的一个优点就是,你的web应用与本地(native)应用或者第三方客户端使用相同的REST API。后端开发者可以专注于构建一个快速,稳定,安全的API服务器,并且也不需要前端经验。</p>    <h2>Ember.js 概览</h2>    <p>三个法宝让你快乐地使用Ember:</p>    <ul>     <li>绑定(Bindings)</li>     <li>计算属性(Computed properties)</li>     <li>自动更新模板(Auto-updating templates)</li>    </ul>    <h3>绑定</h3>    <p>使用绑定可以使两个不同对象的属性保持同步。你只需一次性声明绑定,然后Ember就会确保变更的双向传播。绑定允许你以MVC(Model-View-Controller)模式架构你的应用,然后即可高枕无忧了,数据将永远正确地在层与层之间流动。</p>    <h3>计算属性</h3>    <p>计算属性非常有用,因为它可以像其他任何属性一样与绑定一起使用。许多计算出的属性依赖于其他属性。许多计算出的属性依赖于其他属性。</p>    <h3>自动更新模板</h3>    <p>模板是可感知绑定(bindings-aware)的。意思就是如果你改变了已经告知我们需要显示的属性值,我们会为你自动更新。并且由于你指定了依赖关系,对那些属性的更改也会体现出来。</p>    <p> </p>    <p>这三个强大的工具是如何配合工作的:从一些原始的属性开始,然后使用计算属性构造一些更复杂的属性及其依赖关系。一旦你描述出数据,就只需要一次性指明数据是如何显示的,然后Ember即可帮你完成其余的任务。底层数据是如何改变的并不重要,不管是从XHR请求还是用户执行操作,你的用户界面总会保持实时更新。这消除了一大类开发人员每天为之挣扎的边缘情况。</p>    <p> </p>    <h2>更新日志</h2>    <ul>     <li><a href="/misc/goto?guid=4958993795144369890">#14184</a> [BUGFIX] Ensure that promises that reject with non Errors (i.e. something without a <code>.stack</code>) do not trigger an error during Ember's internal error processing.</li>     <li><a href="/misc/goto?guid=4958993795263642236">#14237</a> [BUGFIX] Ensure Engine Routes are deactivated before destruction.</li>     <li><a href="/misc/goto?guid=4958993795366871144">#14262</a> [BUGFIX] Ensure Controller#transitionToRoute and Route#intermediateTransitionTo work in Engines.</li>     <li><a href="/misc/goto?guid=4958993795471878296">#14272</a> [BUGFIX] Bump router.js to v1.2.1.</li>     <li><a href="/misc/goto?guid=4958993795576418219">#14281</a> [BUGFIX] Ensure referencing <code>parentView</code> in a computed property / observer dependent key (or in the template) does not cause an error during teardown.</li>     <li><a href="/misc/goto?guid=4958993795576418219">#14281</a> [BUGFIX] Prevent errors from scheduling a rerender (by setting a property in<code>willDestroyElement</code>) after a component is destroyed.</li>     <li><a href="/misc/goto?guid=4958993795695820000">#14291</a> [BUGFIX] Fix component action bubbling semantics. Actions should not bubble out of a component when returning <code>true</code>.</li>    </ul>    <h2>下载</h2>    <ul>     <li><a href="/misc/goto?guid=4958993795797287925" rel="nofollow"><strong>Source code</strong> (zip)</a></li>     <li><a href="/misc/goto?guid=4958993795902889057" rel="nofollow"><strong>Source code</strong> (tar.gz)</a></li>    </ul>    <p> </p>    <p>本站原创,转载时保留以下信息:<br /> 本文转自:深度开源(open-open.com)<br /> 原文地址:<a href="http://www.open-open.com/news/view/101337b7">http://www.open-open.com/news/view/101337b7</a></p>