7.11 Models -- Customizing Adapters
一、概述
1. 在Ember Data中,和后台数据存储通信的逻辑存在于Adapter中。Ember Data的有一些内置的假设,一个 REST API 应该怎么看。如果你的后台约定和这些假设不同,Ember Data通过交换或扩展默认的适配器很容易改变它的功能。
2. 自定义适配器的一些原因包括在你的urls中使用underscores_case,使用一个介质而不是REST去和你的后台API甚至使用一个local backend。
3.在Ember Data中扩展适配器是一个自然的过程。Ember认为,你应该扩展一个适配器来增加不同的功能而不是增加一个标记。这使得代码的可测试性更好,更加容易理解并且为那些想要子类化你的适配器的人减少了膨胀。
4. 如果你的后台有一些一致的规则,你可以定义一个adapter:application。这个adapter:application将比默认的适配器获得优先权,然而仍然会被特定的模型适配器取代。
app/adapters/application.js
export default DS.RESTAdapter.extend({
// Application specific overrides go here
});
5. 如果你有一个model对于和它的后台通信有例外的规则,你可以创建一个特定的模型适配器,通过运行命令ember generate adapter adapter-name。例如,运行ember generate adapter post将会创建下面的文件:
app/adapters/post.js
export default DS.RESTAdapter.extend({
namespace: 'api/v1'
});
6. 默认情况下,Ember Data伴随几个内置的适配器。为创建你自己的自定义适配器,使用这些适配器作为开始。
- DS.Adapter:它是基本的没有任何功能的adapter。如果你想创建一个适配器,它通常是一个很好的起点,这是完全不同于其他的Ember adapters。
- DS.RESTAdapter:它是最常见的扩展adapter。这个RESTAdapter允许你的store通过XHR传输的JSON和一个HTTP服务器通信。大多数Ember.js应用程序消耗一个JSON API,它应该使用这个REST适配器。
- DS.ActiveModelAdapter:这是一个特定版本的RESTAdapter,这被设定为通过Rails-style REST APIS开箱即用。
二、Customizing the restadapter
这个 DS.RESTAdapter是最常见的扩展适配器。它有几个hooks,它们通常被用于扩展它和非标准的后台一起工作。
1. Endpoint Path Customization
namespace属性可以被用于使用一个指定的url命名空间给请求加前缀:
app/adapters/application.js
export default DS.RESTAdapter.extend({
namespace: 'api/1'
});
请求person现在将会导航到http://emberjs.com/api/1/people/1。
2. Host Customization
默认的适配器将会导航到当前的域。如果你想指定一个新的域,你可以这样做,在适配器中设定host属性。
app/adapters/application.js
export default DS.RESTAdapter.extend({
host: 'https://api.example.com'
});
请求person现在讲导航到https://api.example.com/people/1。
3. Path Customization
默认的,这个RESTAdapter将尝试复数化和驼峰化这个model name去生成path name。如果这个约定对你的后台来说不符合,你可以重写pathForType方法。
例如,如果你不希望复数化模型名字并且需要underscore_case(下划线命名)代替驼峰化命名,你可以像这样重写pathForType方法:
app/adapters/application.js
export default DS.RESTAdapter.extend({
pathForType: function(type) {
return Ember.String.underscore(type);
}
});
请求person现在将会导航到/person/1。请求userProfile想在将会导航到/user_profile/1。
4. Authoring Adapters
这个默认的defaultSerializer属性可以被用于指定序列化器,它将被这个适配器使用。这个仅仅当一个指定的模型序列化器或者ApplicationSerializer 没有被定义时被使用。
在应用程序中,定义一个ApplicationSerializer通常很简单。然而,如果你是一个社区适配器的作者,在你的适配器用户不指定一个ApplicationSerializer的情况下,记得设置这个属性来保证Ember做正确的事是非常重要的。
app/adapters/my-custom-adapter.js
export default DS.RESTAdapter.extend({
defaultSerializer: '-default'
});
三、Community Adapters
如果没有内置的Ember Data适配器为你的后台工作,一定要去查看一些社区维护的Ember Data适配器。
下面是一些查找Ember Data适配器比较好的地方:
7.11 Models -- Customizing Adapters的更多相关文章
- django models的点查询/跨表查询/双下划线查询
django models 在日常的编程中,我们需要建立数据库模型 而往往会用到表与表之间的关系,这就比单表取数据要复杂一些 在多表之间发生关系的情形下,我们如何利用models提供的API的特性获得 ...
- Django详解之models操作
D jango 模型是与数据库相关的,与数据库相关的代码一般写在 models.py 中,Django 支持 sqlite3, MySQL, PostgreSQL等数据库,只需要在settings.p ...
- Ember.js学习教程 -- 目录
写在前面的话: 公司的新项目需要用到Ember.js,版本为v1.13.0.由于网上关于Ember的资料非常少,所以只有硬着头皮看官网的Guides,为了加深印象和方便以后查阅就用自己拙劣的英语水平把 ...
- Spring框架文档与API(4.3.6版本)
http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/ Table of Contents I ...
- url路由、模板语言、ajax、用django框架创建表
1.后台管理的左侧菜单,默认只有第一个页签下面的选项是显示的,点了别的页签再显示别的页签下面的选项,问题是:点了任何菜单的选项后,左侧菜单又成了第一个页签的选项显示,别的页签隐藏,也就是左侧的菜单刷新 ...
- CodeIgniter目录结构
1.1 application 是你自己的项目存放文件的目录(控制器.模型和视图等!) (1)分析application文件夹中的目录 (1.1) cache文件是放缓存文件 (1 ...
- Django框架中的model(操作数据库)
什么是ORM ORM,即Object-Relational Mapping(对象关系映射),它的作用是在关系型数据库和业务实体对象之间作一个映射,这样,我们在具体的操作业务对象的时候,就不需要再去和复 ...
- python django的ManyToMany简述
Django的多对多关系 在Django的关系中,有一对一,一对多,多对多的关系 我们这里谈的是多对多的关系 ==我们首先来设计一个用于示例的表结构== # -*- coding: utf-8 -*- ...
- python Django知识点总结
python Django知识点总结 一.Django创建项目: CMD 终端:Django_admin startproject sitename(文件名) 其他常用命令: 其他常用命令: 通过类创 ...
随机推荐
- Storm架构和编程模型总结
1. 编程模型 DataSource:外部数据源 Spout:接受外部数据源的组件,将外部数据源转化成Storm内部的数据,以Tuple为基本的传输单元下发给Bolt Bolt:接受Spout发送的数 ...
- 改变vux样式
场景:修改 x-header 颜色 解决: 在创建文件路径如下 src/assets/less/theme.less ; 在build/webpack.base.conf.js下添加 这两行即可
- Android Usb Camera HAL框架
- 记录一下gitlab通过CAS登录慢的问题
测试反应说gitlab通过CAS登录比较慢,第一次登录的时候需要大概30秒才能登录进去 gitlab的日志中有处理每一个请求所用的时间,看了一下日志,每个有记录的请求都是在50毫秒内返回的,所以应该不 ...
- dhroid - dhroid ioc模块对 加密混淆问题
大家应该已经看过ioc的知识在ioc基础中中视图事件都是通过注解实现的问题1如果有某个属性只声明了一下,其他代码没有引用由于混淆时会进行属性优化,将没用的属性去掉,这时需要处理 处理方法:在混淆配置文 ...
- Unity3D笔记 英保通十 射线碰撞器检测
射线碰撞检测可以用来检测方向和距离: 通过Physics.RayCast光线投射来实现:常用于射击利用发射的射线来判断.还有对战中刀剑交战中.. 一.要涉及到RayCast和RayCastHit 1. ...
- mac设置文件权限问题
在使用mac时,经常我们遇到相关文件不能使用的情况,其实大多数情况都是,文件权限问题. 文件或目录的访问权限分为只读,只写和可执行三种.以文件为例,只读权限表示只允许读其内容,而禁止对其做任何的更改操 ...
- Spark2 探索性数据统计分析
data数据源,请参考我的博客http://www.cnblogs.com/wwxbi/p/6063613.html import org.apache.Spark.sql.DataFrameStat ...
- 慕课学习--DNS的作用
因为相对于32位的IP地址,人对域名更加敏感,也更容易记忆.所以一般都是把IP地址转化为域名进行网页的访问. DNS(Domain Name System,域名系统),万维网上作为域名和IP地址相互映 ...
- 2018牛客网暑期ACM多校训练营(第五场) E - room - [最小费用最大流模板题]
题目链接:https://www.nowcoder.com/acm/contest/143/E 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K ...