zoukankan      html  css  js  c++  java
  • 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适配器比较好的地方:

  • 相关阅读:
    idea中使用git进行clone、分支切换、pull、push等
    grep参数说明及常用用法(转)
    性能01篇-如何胜任性能测试工程师岗位
    2016年7款最流行的Java框架
    Python程序员都会喜欢的6个库
    web开发者最有用的10个Python包
    web开发的10款Python框架
    python的十个技巧
    Python的接口测试框架实例
    调试支付宝接口?
  • 原文地址:https://www.cnblogs.com/sunshineground/p/5165991.html
Copyright © 2011-2022 走看看