Day 19: EmberJS 入门指南
Ember是一个客户端的JavaScript MV* 框架,用来构建野心勃勃的web应用。它依赖于jQuery和Handlebars库。如果你曾经在Backbone下工作,那么你会发现Ember是一个武断的Backbone,或者Backbone++。Ember可以为你完成很多事情,如果你遵循它的命名约定的话。Ember.js在这方面很突出。因此,如果我们在应用中加入了url路由和报道,那么我们就有了这些:
- 报道的模板
- StoriesRoute
- StoriesController
Ember核心概念
模型:模型代表我们展示给用户的应用领域内的对象。在上述例子中,一个报道就代表一个模型。报道,加上它的属性,包括标题、url等,构成一个模型。模型可以通过jQuery加载服务器端的JSON数据的方式来获取和更新,也可以通过Ember Data来获取和更新。Ember Data是一个客户端的ORM实现,可以利用它方便地对底层的持久性存储进行CRUD操作。Ember Data提供一个仓库接口,可以借助提供的一些适配器配置。Ember Data提供的两个核心适配器是RESTAdapter和FixtureAdapter。在本文中,我们将使用LocalStorage适配器,该适配器将数据持久化为 HTML 5 的LocalStorage。请参阅此文档了解详情。
路由器和路由:路由器指定应用的所有路由。路由器将URL映射到路由。例如,当一个用户访问 /#/story/new 的时候,将渲染 newstory 模板。该模板展现了一个HTML表单。用户可通过创建 Ember.Route 子类来定制路由。在上述例子中,用户访问 /#/story/new 将渲染一个基于 newstory 模板的默认模型。 NewStoryRoute 会负责将默认的模型分配给 newstory 模板。请参阅文档了解详情。
控制器:控制器可以做两件事——首先它装饰路由返回的模型,接着它监听用户执行的行动。例如,当用户提交报道的时候,NewStoryController负责通过Ember Data API将报道的数据持续化到存储层。请参阅文档了解详情。
Ember的Chrome插件
Github仓库
第一步 FinRL 入门指南 下载新手套装
ember提供了一套新手装备,因此开始使用框架非常简单。新手套装包括了需要用到的javascript文件( ember-*.js 、 jquery-*.js 和 handlerbars-*.js )以及示例应用。下载新手套装,解压缩,最后重命名为 getbookmarks 。
在浏览器中打开 index.html FinRL 入门指南 ,你会看到如下页面:
第二步 启用GruntJS监视
在 getbookmarks 文件夹内创建 package.FinRL 入门指南 json ,内容如下:
创建 Gruntfile.FinRL 入门指南 js ,内容如下:
在 index.html 的头部加入:
调用 grunt FinRL 入门指南 watch 命令,同时在你的默认浏览器中打开 index.html 。
修改 index.html ,无需刷新就能看到改变:
第三步 理解新手模板应用
在新手模板中,除了css之外,有两个和应用相关的文件—— index.html 和 app.js 。为了理解模板应用的作用,我们需要理解 app.js 。
使用 App.Route.map 定义应用的路由。每个Ember应用都有一个默认路由 Index ,绑定到 / 。所以,当调用 / 路由的时候, index 模板将被渲染。 index 模板由 index.html 定义。感觉到了很多“约定大于配置”了吧?
在Ember中,每个模板都有一个model作为支持。路由负责制定哪个mobdel支持哪个模板。在上述 app.js 中, IndexRoute 返回一个字符串数组,作为index模板的model。index模板迭代这个数组然后渲染一个列表。
第四步 移除新手模板代码
移除 js/app.js 中的代码,然后用以下内容替换:
相应地,将 index.html 的内容替换为:
第五步 添加Twitter Bootstrap
我们将使用twitter bootstrap来给应用添加样式。从官网下载twitter bootstrap包,然后复制 bootstrap.css 到css文件夹,同时复制字体文件夹。
接着在 index.html 中加入 FinRL 入门指南 bootstrap.css ,在页首使用一个固定位置的导航条。
在 FinRL 入门指南 css/style.css 中加入下面的代码。这会在正文上方添加一个40px的空白。这样才能正确地渲染固定位置的导航条。
第五步 提交新报道
我们将开始实现提交新报道的功能。Ember建议你围绕着URL思考。当用户访问 #/story/new 的时候,会展示一个表单。
在 App.Router.Map 中增加一个绑定 #/story/new FinRL 入门指南 的新路由:
接着我们在 index.html 中添加一个渲染表单的 newstory 模板:
访问 #/story/new 即可查看表单:
接着我们在导航条中添加一个链接,这样访问报道提交表单就很容易。替换一下 nav 元素:
表单已经有了,接下来要添加HTML 5本地存储的功能。为了添加本地存储支持,我们需要首先下载Ember Data和Local Storage Adapter JavaScript文件。将这些文件放在 js/libs 下。接着,在 index.html 中添加这些 script 标签。
如前所述,Ember Data是一个客户端的ORM实现,它使在底层存储进行CRUD操作很容易。这里我们将使用LSAdapter。在 app.js 中加入:
接着我们编写 NewstoryController 来持久化内容:
以上代码展示了如何从获取表单中的值,然后使用store API在内存中创建记录。为了在localstorage中存储记录,我们需要调用Story对象的save方法。最后,我们将用户重定向到 index 路由。
第六步 显示所有报道
还有一个问题,报道没有按照时间顺序排列。我们将创建一个IndexController负责排序。我们指定依照 submittedOn 属性倒序排列,以确保新的报道出现在上面。
Quarkus - 入门
学习如何使用 Quarkus 创建响应式应用,了解 Quarkus 提供的响应式特性的差异. 该指南包括:
- Quarkus 引擎概览及如何启用响应式
- 简单介绍 Mutiny - Quarkus 使用的响应式类库
- 启动一个响应式应用
- 创建一个响应式 JAX-RS 接口 (异步, 流式)
- 响应式访问数据库
- 与其它响应式 API 交互
快速启动程序
使用 code.quarkus.io, 点几下就能启用你的 Quarkus 程序发现扩展生态系统.
探索 Quarkus 应用程序中可以使用的广泛技术。
构建原生镜像
- 将应用程序编译为原生可执行文件
- 将应用程序打包在Docker容器中
Quarkus 附带了一个工具链,使开发人员能够从实时重新加载到部署 Kubernetes 应用程序。在该指南中,我们将探讨:
- 如何使用Maven作为构建工具
- 如何使用Gradle作为构建工具
- 如何为您的工具链使用本机CLI(即将推出)
- 如何搭建新项目
- 如何处理扩展
- 如何启用实时重新加载
- 如何在IDE中开发应用程序
- 如何编译为原生程序
Quarkus is open. All dependencies of this project are available under the Apache Software License 2.0 or compatible license.
This website was built with Jekyll is hosted on Github Pages and is completely open source. If you want to make it better, fork the website and show us what you’ve got.