2019独角兽企业重金招聘Python工程师标准>>>

本篇内容较多,拆分为两篇!

Ember官网用了大篇幅来介绍model,相比之前的controller简直就是天壤之别啊!

从本篇开始学习Ember的模型,这一章也是Ember基础部分的最后一章内容,非常的重要(不管你信不信反正我是信了)。

在开始学习model之前先做好准备工作:

重新创建一个Ember项目,仍旧使用的是Ember CLI命令创建。

ember new chapter6_models

cd chapter6_models

ember server

在浏览器执行项目,看到如下信息说明项目搭建成功。

Welcome to Ember

本章演示所用到的代码都可以从https://github.com/ubuntuvim/my_emberjs_code/tree/master/chapter6_models获取。

在介绍model之前先在项目中引入firebase。相关的配置教材请移步这里(如果无法加载页面请先在https://www.firebase.com/注册用户)。firebase的官网提供了专门用于Ember的版本,还提供了非常简单的例子。从安装到整合都给出了非常详细代码教程。

下面是我的整合步骤(命令都是在项目目录下执行的):

1,安装

ember install emberfire

安装完成之后会自动创建adapter(app/adapters/application.js),对于这个文件不需要做任何修改,官网提供的代码也许跟你的项目的代码不同,应该是官网的版本是旧版的。

2,配置config/environment.js

修改第八行firebase: 'https://YOUR-FIREBASE-NAME.firebaseio.com/'。这个地址是你注册用户时候得到的。你可以从这里查看你的地址。比如下图所示位置

3,再在config/enviroment.js的APP:{}(大概第20行)后面新增如下代码

APP: {// Here you can pass flags/options to your application instance// when it is created},contentSecurityPolicy: {'default-src': "'none'",'script-src': "'self' 'unsafe-inline' 'unsafe-eval' *",'font-src': "'self' *",'connect-src': "'self' *",'img-src': "'self' *",'style-src': "'self' 'unsafe-inline' *",'frame-src': "*"}

然后再注释掉第7行原有属性(安装firebase自动生成的,但是配置不够完整):contentSecurityPolicy。

或者你可以按照我的配置文件设置:

/* jshint node: true */module.exports = function(environment) {var ENV = {modulePrefix: 'chapter6-models',environment: environment,// contentSecurityPolicy: { 'connect-src': "'self' https://auth.firebase.com wss://*.firebaseio.com" },firebase: '你的firebase连接',baseURL: '/',locationType: 'auto',EmberENV: {FEATURES: {// Here you can enable experimental features on an ember canary build// e.g. 'with-controller': true}},APP: {// Here you can pass flags/options to your application instance// when it is created},contentSecurityPolicy: {'default-src': "'none'",'script-src': "'self' 'unsafe-inline' 'unsafe-eval' *",'font-src': "'self' *",'connect-src': "'self' *",'img-src': "'self' *",'style-src': "'self' 'unsafe-inline' *",'frame-src': "*"}};// 其他代码省略……return ENV;
};

如果不做这个配置启动项目之后浏览器会提示一堆的错误。主要是一些访问权限问题。配置完之后需要重启项目才能生效!

1,简介

model是一个用于向用户呈现底层数据的对象。不同的应用有不同的model,这取决于解决的问题需要什么样的model就定义什么样的model。

model通常是持久化的。这也就意味着用户关闭了浏览器窗口model数据不应该丢失。为了确保model数据不丢失,你需要存储model数据到你所指定的服务器或者是本地数据文件中。

一种非常常见的情况是,model数据会以JSON的格式通过HTTP发送到服务器并保存在服务中。Ember还未开发者提供了一种更加简便的方式:使用IndexedDB(使用在浏览器中的数据库)。这种方式是把model数据保存到本地。或者使用Ember Data,又或者使用firebase,把数据直接保存到远程服务器上,后续的文章我将引入firebase,把数据保存到远程服务器上。

Ember使用适配器模式连接数据库,可以适配不同类型的后端数据库而不需要修改任何的网络代码。你可以从emberobserver上看到几乎所有Ember支持的数据库。

如果你想把你的Ember应用与你的远程服务器整合,几遍远程服务器API返回的数据不是规范的JSON数据也不要紧,Ember Data可以配置任何服务器返回的数据。

Ember Data还支持流媒体服务器,比如WebSocket。你可以打开一个socket连接远程服务器,获取最新的数据或者把变化的数据推送到远程服务器保存。

Ember Data为你提供了更加简便的方式操作数据,统一管理数据的加载,降低程序复杂度。

对于model与Ember Data的介绍就到此为止吧,官网用了大量篇幅介绍Model,在此我就不一一写出来了!太长了,写出来也没人看的!!!如果有兴趣自己看吧!点击查看详细信息。

下面先看一个简单的例子,由这个例子延伸出有关于model的核心概念。这些代码是旧版写法,仅仅是为了说明问题,本文也不会真正执行。

//  app/components/list-of-drafts.js
export default Ember.Component.extend({willRender() {// ECMAScript 6语法$.getJSON('/drafts').then(data => {this.set('drafts', data);});}
});

定义了一个组件类。并在组件类中获取json格式数据。

下面是组件对应的模板文件。

<!-- app/templates/components/list-of-drafts.hbs  -->
<ul>{{#each drafts key="id" as |draft|}}<li>{{draft.title}}</li>{{/each}}
</ul>

再定义另外一个组件类和模板

//  app/components/list-button.js
export default Ember.Component.extend({willRender() {// ECMAScript 6语法$.getJSON('/drafts').then(data => {this.set('drafts', data);});}
});
<!-- app/templates/components/ list-button.hbs  -->
{{#link-to ‘drafts’ tagName=’button’}}
Drafts ({{drafts.length}})
{{/link-to}}

组件list-of-drafts类和组件list-button类是一样的,但是他们的对应的模板却不一样。但是都是从远程服务器获取同样的数据。如果没有Store(model核心内容之一)那么每次这两个模板渲染都会是组件类调用一次远程数据。并且返回的数据是一样的。这无形中增加了不必要的请求,暂用了不必要的宽带,用户体验也不好。但是有了Store就不一样了,你可以把Store理解为仓库,每次执行组件类时先到Store中获取数据,如果没有再去远程获取。当在其中一个组件中改变某些数据,数据的更改也能理解反应到另一个获取此数据的组件上(与计*算属性自动更新一样),而这个组件不需要再去服务请求才能获取最新更改过的数据。

下面的内容将为你一一介绍Ember Data最核心的几个东西:models、records、adapters、store。

Ember.js 入门指南——model简介2

转载于:https://my.oschina.net/ubuntuvim/blog/518193

Ember.js 入门指南——model简介1相关推荐

  1. ember.js mysql_Ember.js 入门指南——model简介1

    本篇内容较多,拆分为两篇! Ember官网用了大篇幅来介绍model,相比之前的controller简直就是天壤之别啊! 从本篇开始学习Ember的模型,这一章也是Ember基础部分的最后一章内容, ...

  2. Ember.js 入门指南——查询记录

    2019独角兽企业重金招聘Python工程师标准>>> store提供了统一的获取数据的接口.包括创建新记录.修改记录.删除记录等,更多有关Store API请看这个网址的介绍:ht ...

  3. Ember.js 入门指南——定义模型

    2019独角兽企业重金招聘Python工程师标准>>> model也是一个类,它定义了向用户展示的属性和数据行为.model的定义非常简单,只需要继承DS.Model类即可,或者你也 ...

  4. Ember.js 入门指南——handlebars属性绑定

    2019独角兽企业重金招聘Python工程师标准>>> 本文从http://www.ibeginer.sinaapp.com迁移过来,欢迎访问原页面. 简单讲属性绑定其实就是在HTM ...

  5. Ember.js 入门指南——番外篇,路由、模板的执行、渲染顺序

    2019独角兽企业重金招聘Python工程师标准>>> 在Ember中路由和模板的执行都是有一定顺序的,它们的顺序为:主路由à子路由1à子路由2à子路由3à--.模板渲染的顺序与路由 ...

  6. Ember.js 入门指南——路由切换的终止和回跳

    2019独角兽企业重金招聘Python工程师标准>>> 在路由的切换过程中,Ember路由器会通过回调(beforeModel.model.afterModel.redirect)解 ...

  7. Ember.js 入门指南——路由重定向

    2019独角兽企业重金招聘Python工程师标准>>> 声明:对于transition这个词直译是"过渡"的意思,但是总觉得"路由的过渡"读起 ...

  8. Ember.js入门教程、博文汇总

    第一章 对象模型 Ember.js 入门指南--类的定义.初始化.继承 Ember.js 入门指南--类的扩展(reopen) Ember.js 入门指南--计算属性(compute properti ...

  9. 物理世界的互动之旅:Matter.js入门指南

    点击上方 前端Q,关注公众号 回复加群,加入前端Q技术交流群 本文简介 戴尬猴,我是德育处主任 欢迎来到<物理世界的互动之旅:Matter.js入门指南>. 本文将带您探索 Matter. ...

  10. d3.js 入门指南 - 仪表盘

    D3的全称是Data-Driven Documents(数据驱动的文档),是一个用来做数据可视化的JavaScript函数库,而JavaScript文件的后缀通常为.js,所以D3被称为D3.js. ...

最新文章

  1. ASP.NET弹出一个对话框
  2. win 2008 server 更改远程桌面端口的方法
  3. 《深入浅出数据分析》第十章第十一章
  4. vivo X Fold或首发国产最强屏幕:120Hz LTPO 3.0
  5. 随想录(risc cpu的那些事)
  6. mysql dump xtrabackup_MySQL之备份和恢复(msyqldump、LVM、xtrabackup)
  7. 透过 ASP.NET 和数据库读写图片
  8. cfree安装与使用
  9. CODESYS学习心得(持续更新)
  10. Windows事件ID大全
  11. 自己动手写CPU(8)——简单算术操作指令的实现
  12. oracle的aud文件是什么,Oracle 11g 在audit_file_dest目录下产生大量的aud文件
  13. 袋鼠云数据中台专栏2.0 | 数据中台之数据源
  14. 被遗忘权_继续–被遗忘的声明
  15. 小新pro13睡眠后无法唤醒_东芝笔记本睡眠后无法唤醒怎么办
  16. 苹果手机备份有必要吗_旧手机里的便签能备份到新手机里吗?
  17. 操作数据库表中的字段(增加、删除列)
  18. fluter的环境搭配及android studio开发
  19. 自从干了IT,我犯过的这些错可以绕地球一圈…
  20. SO_KEEPALIVE

热门文章

  1. postgresql could not connect to server
  2. wire routing 网格寻址
  3. implode - of an array
  4. 1022: [SHOI2008]小约翰的游戏John - BZOJ
  5. 防火墙软件 - IPCop
  6. Sqlserver表数据误删除后的恢复
  7. 转 Grub4Dos硬盘安装Fedora/CentOS Linux操作系统
  8. 相机标定—了解相机模型
  9. 对 Sea.js 进行配置 seajs.config
  10. 推荐一篇我高中同班同学的文章[转载]