文档章节

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

ubuntuvim
 ubuntuvim
发布于 2015/10/17 02:12
字数 1655
阅读 495
收藏 0

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

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

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

2,配置config/environment.js

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

 

3,config/enviroment.jsAPP:{}(大概第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为你提供了更加简便的方式操作数据,统一管理数据的加载,降低程序复杂度。

 

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

 

下面的内容将为你一一介绍Ember Data最核心的几个东西:modelsrecordsadaptersstore

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


© 著作权归作者所有

ubuntuvim
粉丝 33
博文 76
码字总数 98477
作品 1
深圳
后端工程师
私信 提问
Ember.js 入门指南——总目录

Ember.js 是什么?我想对于想学习它的人应该知道它是个什么东西,如果你想了解那就赶紧去 Google 或者百度,本系列教程是通过学习官网教程然后摘抄个人觉得比较重要的部分,加上学习实例整合...

ubuntuvim
2015/10/25
1K
2
Ember.js 入门指南--目录

本系列文章全部从(http://ibeginner.sinaapp.com/)迁移过来,欢迎访问原网站。 Ember.js 是什么?我想对于想学习它的人应该知道它是个什么东西,如果你想了解那就赶紧去 Google 或者百度,...

ubuntuvim
2015/09/07
389
2
Ember.js 入门指南——路由简介

从本文开始,将为大家介绍路由(route),如果你看过前面的《Ember.js 入门指南——{{link-to}} 助手》这篇文章应该初步了解了route。不过在这篇文章中只是简单介绍了路由是定义、路由层次,...

ubuntuvim
2015/09/22
474
0
从服务器获取数据,引入组件

博文原址:http://blog.ddlisting.com/2016/04/21/yin-ru-zu-jian/ 接着前面四篇: 环境搭建以及使用Ember.js创建第一个静态页面 引入计算属性、action、动态内容 模型,保存数据到数据库 发...

ubuntuvim
2016/04/26
73
0
Ember.js 入门指南——控制器(controller)

ember new chapter5_controllerscd chapter5_controllersember server 从本篇开始进入第五章控制器,controller在Ember2.0开始越来越精简了,职责也更加单一——处理逻辑。 下面是准备工作。...

ubuntuvim
2015/10/15
328
0

没有更多内容

加载失败,请刷新页面

加载更多

一、docker 入坑(win10和Ubuntu 安装)

前言 终究还是绕不过去了,要学的知识真的是太多了,好在我们还有时间,docker 之前只闻其声,不曾真正的接触过,现在docker 越来越火,很多公司也都开始使用了。所以对于我们程序员而言,又...

quellanan2
8分钟前
4
0
AutoCompleteTextView

小技巧按菜单键 当菜单打开之前会调用onMenuOpened(int featereId,Menu menu),可以重写这个方法,弹出对话框或者Popmenu 再布局中添加控件AutoCompleteTextView. <AutoCompleteTextVie...

逆天游云
11分钟前
3
0
谷歌软件商店:推出5美元会员 可用数百个软件

腾讯科技讯,谷歌和苹果是全球两大智能手机操作系统的运营者,两家公司旗下分别拥有占据行业垄断地位的谷歌软件商店和苹果软件商店。据外媒最新消息,手机软件商店的商业模式正在发生一些变化...

linuxCool
33分钟前
2
0
RocketMQ 多副本前置篇:初探raft协议

Raft协议是分布式领域解决一致性的又一著名协议,主要包含Leader选举、日志复制两个部分。 温馨提示: 本文根据raft官方给出的raft动画进行学习,其动画展示地址:http://thesecretlivesofda...

中间件兴趣圈
33分钟前
2
0
elasticsearch 6.8.0 添加认证

1. 修改elasticsearch-6.8.0/config/elasticsearch.yml 最后添加一行:xpack.security.enabled: true 2. 初始化用户和密码 ./bin/elasticsearch-setup-passwords interactive 我这里初始化为......

coord
35分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部