Ember.JS – 它是什么以及我们为什么需要关注它

这是 Sourav Lahoti 的客座文章,表达了他对 Ember.js 的看法。

开发人员越来越多地转向客户端框架来简化开发,并且在这方面对好的框架有很大的需求。我们看到了这个领域中有很多参与者,但是对于大量的功能和移动部件,很少有特别突出的——Ember.js 就是其中之一。

那么什么是Ember.js?Ember.js 是一个由 Ember Core 团队(包括 Tom Dale、Yehuda Katz 等)维护的 MVC(模型-视图-控制器)JavaScript 框架。它帮助开发人员创建雄心勃勃的单页面 Web 应用程序,而不会牺牲 Web 的优点:URI 语义、RESTful 架构以及 HTML、CSS 和 JavaScript 的“一次编写,随处运行”的特性。

我们为什么需要关注

Ember.js 与构成当今 Web 的技术紧密结合。它并没有试图将这些技术抽象化。Ember.js 提供了一种简洁一致的应用程序开发模型。如果需要从 HTML 迁移到任何其他技术,Ember.js 框架将随着 Web 前端技术的当前趋势而发展。

它使创建自己的“组件”和“模板视图”变得非常容易,这些视图易于理解、创建和更新。结合其一致的绑定和计算属性管理方式,Ember.js 确实提供了 Web 框架所需的许多样板代码。

核心概念

在使用 Ember.js 时,您会发现一些常见的术语,它们构成了 Ember.js 的基础。

路由
路由对象基本上表示应用程序的状态,并对应于一个 URL。
模型
每个路由都有一个关联的模型对象,其中包含与应用程序当前状态相关的数据。
控制器
控制器用于使用显示逻辑装饰模型。

如果模板与单个模型记录相关联,则控制器通常继承自 ObjectController;如果模板与记录列表相关联,则继承自 ArrayController。.

视图
视图用于向模板添加复杂的事件处理,或向模板添加可重用的行为。
组件
组件是一种专门的视图,用于创建可以在模板中轻松重用的自定义元素。

Ember.js 实践

数据绑定


App = Ember.Application.create();

用户与 Web 应用程序交互时的最终结果

Ember.js 确实支持数据绑定,正如我们在上面的示例中看到的。我们在输入中键入的内容绑定到 name,就像 Echo: 后面的文本一样。当您在一个地方更改文本时,它会自动更新到所有地方。

但这是如何发生的?Ember.js 使用 Handlebars 进行双向数据绑定。用 Handlebars 编写的模板从其控制器获取和设置数据。每次我们在输入中键入内容时,控制器的 name 属性都会更新。然后,模板会自动更新,因为绑定的数据已更改。

使用 Handlebars 的简单名片演示

我们可以使用 Handlebars 创建自己的元素。

HTML




CSS

.vcard {
  border: 1px solid #dcdcdc;
  max-width: 12em;
  padding: 0.5em;
}

.vcard li {
  list-style: none;
}

.vcard .name {
  font-weight: bold;
}

.vcard .email {
  font-family: monospace;
}

label {
  display: block;
  margin-top: 0.5em;
}

JavaScript

App = Ember.Application.create();

App.ApplicationController = Ember.Controller.extend({
    name: 'Sourav',
    address: '123 M.G Road.',
    city: 'Kolkata',
    zipCode: '712248',
    email: 'me@me.com'
});

组件通过打开一个新的 <script type="text/x-handlebars"> 并使用 data-template-name 属性将其模板名称设置为 components/[NAME] 来定义。

我们应该注意,Web 组件规范要求名称中包含连字符,以便将其与现有的 HTML 标签区分开来。

这里只是触及了表面,还有很多内容。有关更多信息,请随时查看Ember.js 指南

关于 Sourav Lahoti

Sourav 来自印度加尔各答,拥有西孟加拉大学信息技术专业的学士学位,拥有丰富的领导力和社区倡导经验。Sourav 目前居住在印度加尔各答,并且自 2012 年对技术产生兴趣以来一直积极参与应用程序开发和 Web 开发。于 2014 年成为“Firefox OS 应用市场应用审核员”。

Sourav Lahoti 的更多文章…

关于 Robert Nyman [荣誉编辑]

Mozilla Hacks 的技术布道者和编辑。发表关于 HTML5、JavaScript 和开放 Web 的演讲和博客。Robert 是 HTML5 和开放 Web 的坚定支持者,自 1999 年以来一直从事 Web 前端开发工作——在瑞典和纽约市。他还定期在http://robertnyman.com 上发表博客,并且热爱旅行和结识新朋友。

Robert Nyman [荣誉编辑] 的更多文章…


13 条评论

  1. Rafael

    关于数据绑定的非常好的、直接的解释。

    2014 年 2 月 20 日 02:51

    1. Robert Nyman [编辑]

      谢谢,很高兴您喜欢它!

      2014 年 2 月 20 日 05:59

  2. peperone

    “拥有丰富的领导力和社区倡导经验”,我喜欢这个人如此谦虚…

    2014 年 2 月 20 日 06:34

  3. Daniel Filho

    迄今为止关于 MVC/Ember 最佳的非冗长介绍。
    很棒的文章 :)

    2014 年 2 月 20 日 09:38

    1. Sourav Lahoti

      谢谢!

      2014 年 3 月 2 日 09:39

  4. Hugo

    当我们使用这种框架(不一定是 Ember,而是任何 MVC 框架)时,与纯 JS 相比,性能是否会下降?
    我特别想了解移动 Web 应用程序,在其中性能至关重要,使用 MVC 框架是否会降低应用程序速度,或者影响可以忽略不计?

    2014 年 2 月 20 日 10:57

    1. Nico

      我为移动设备开发了 Ember.js + PhoneGap 应用程序。它确实会在性能方面产生一定的损失,因为 Webview 没有使用标准的 JS 引擎。在大多数情况下,您不会注意到这一点——但对于绑定的大型列表来说,这可能是一个问题。没有 PhoneGap 的 Ember.js 速度更快,这是不可否认的。

      确实存在差异,但是要编写相同级别的功能所需的 JS 代码量却令人震惊。对我来说,选择很明确,承受一点性能损失,换取更高的生产力、长期的支持和干净的项目结构。

      对我来说,生产力的提升是巨大的。

      2014 年 2 月 21 日 10:57

      1. Hugo

        非常感谢您的反馈。

        2014 年 2 月 21 日 14:44

    2. Lucas Holmquist

      这是一个关于如何在移动设备上提高 Ember 性能的可靠演示。

      2014 年 2 月 21 日 18:51

  5. Popcorn

    Ember 与 AngularJS 相比如何?它的优缺点是什么?

    2014 年 2 月 22 日 02:59

  6. Josh Habdas

    感谢您的文章和单向绑定示例。我查看了 Ember 文档,但找不到关于双向数据绑定的太多信息。我使用 Rivets 在其他框架中实现了这一点。有人可以为我们提供一个 Ember 示例吗?这是一个使用 Backbone 和 Chaplin 的示例:https://github.com/jhabdas/chapless-rivetsjs

    2014 年 2 月 22 日 09:18

  7. Josh Habdas

    !DYAC

    2014 年 2 月 22 日 09:20

  8. Jerzy

    查看 Ember.js、Angular.js 和 Riot.js 的大小比较:https://moot.it/riotjs/——我更喜欢后者,因为它非常快且没有膨胀。查看使用 Riot.js 制作的完整演示应用程序。

    2014 年 2 月 25 日 17:15

本文评论已关闭。