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(文件名) 其他常用命令: 其他常用命令: 通过类创 ...
随机推荐
- 获取Web.config的内容
<web.config> web.config文件是一个XML文件,它的根结点是<configuration>,在<configuration>节点下的常见子节点有 ...
- Office Online Server2016安装手册
Office Online Server2016安装手册 1.加入域 加入域,机器名为:OOS.Contoso.com 2.安装前提条件 运行powershell检查先决条件 Add-WindowsF ...
- node项目部署相关问题
process.env process.env属性返回一个对象,包含了当前Shell的所有环境变量. 通常的做法是,新建一个环境变量NODE_ENV,用它确定当前所处的开发阶段,生产阶段设为produ ...
- elasticsearch的索引自动清理及自定义清理
近发现elasticsearch近期索引文件大的吓人,清理了下之前的索引文件,发现服务器性能大大的减轻了一半,想一直保留近一个月的索引文件,但是又不想每个月手动清楚,在此写了一个小脚本 查询索引: c ...
- 远程服务器git搭建
在远程服务器如:/var/www下创建hello.git 然后git init --bare hello.git cd hello.git会看到下面的目录和文件 然后创建可以访问git的用户 git ...
- Flask 学习篇二:学习Flask过程中的记录
Flask学习笔记: GitHub上面的Flask实践项目 https://github.com/SilentCC/FlaskWeb 1.Application and Request Context ...
- 2018-2019-2 20165330《网络对抗技术》Exp3 免杀原理与实践
目录 基础问题 相关知识 实验内容 实验步骤 实验过程中遇到的问题 离实战还缺些什么技术或步骤? 实验总结与体会 实验内容 正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil- ...
- MySQL NDB集群安装配置(mysql cluster 9.4.13 installation)
一.安装前规划 1.安装软件版本:mysql-cluster-gpl-7.4.13-linux-glibc2.5-x86_64.tar.gz 2.安装规划: 主机名 Ip地址 角色 db01 192. ...
- FW 编译Android系统源码和内核源码
编译Android系统源码和内核源码 分类: Android2014-07-21 20:58 7287人阅读 评论(28) 收藏 举报 好长时间没有写blog了,之所以没有写,主要还是工作上的事,发现 ...
- iOS - 互斥锁&&自旋锁 多线程安全隐患(转载)
一.多线程安全隐患 资源共享 一块资源可能会被多个线程共享,也就是多个线程可能会访问到一块资源 比如多个线程访问同一个对象,同一个变量,同一个文件. 当多线程访问同一块资源的时候,很容易引发数据错乱 ...