在Ember CLI中将自定义适配器与特定模型相关联

威廉·纽比

我们最近从Ember切换到Ember CLI,但我找不到将模型与自定义适配器关联的正确约定。

历史记录我们为模型创建了一个适配器,该模型的上载文件是其创建路线的一部分,因此可以将表单数据和二进制数据推送到后端api [rails]中的一个端点。适配器使用FormData对象将文件添加到请求中。我选择仅将此适配器用于带有文件的模型,而让非文件上载模型使用应用程序适配器。因此,我希望ember应用程序支持多个适配器。

自定义适配器:在adapters / file-upload.js中

import DS from 'ember-data';

var FileUploadAdapter = DS.ActiveModelAdapter.extend({
    ajaxOptions: function(url, type, hash) {
        var self = this;
        hash = hash || {};
        hash.url = url;
        hash.type = type;
        hash.dataType = 'json';
        hash.context = this;

        //add post data to formdata object
        if (hash.data && type != 'GET' && type !='DELETE') {
          hash.processData = false;
          hash.contentType = false;
          var fd = new FormData();
          var root = Object.keys(hash.data)[0];

          for (var i = 0; i < Object.keys(hash.data[root]).length; i++) {
            var key = Object.keys(hash.data[root])[i];
            if (hash.data[root][key]) {
              fd.append(root + "[" + key + "]", hash.data[root][key]);
            }
          }
          hash.data = fd;
        }

        var headers = this.get('headers');
        if (headers) {
          hash.beforeSend = function(xhr){
            for (var i = 0; i < Ember.keys(headers).length; i++) {
              xhr.setRequestHeader(Ember.keys(headers)[i], headers[Ember.keys(headers)[i]]);
            }
          }
        }

        return hash;
    }
});

export default FileUploadAdapter;

在“经典” Ember中,我能够通过以下约定告诉ember在模型上使用特定的适配器:

//given a model name "Person", specific adapter via {ModelName}Adapter
App.PersonAdapter = App.FileUploadAdapter.extend();

但是现在我们在Ember CLI中没有这些全局对象,有没有办法指定适配器?我假设我要在导出模型并在那里进行其他设置之前将模型分配给变量。

我希望符合ember cli范式,因此,如果您认为这与它相距太远,请告诉我。我可以回过头来使用一个适配器并在其中进行文件检测,但是将自定义功能分成多个适配器感觉更干净。

谢谢!

Tstirrat

Ember Data使用解析器查找适配器。通过查找每个类型的适配器adapter:<type>,因此对于Person来说是adapter:person

ember-cli使用es6模块和jj- abrams -resolver根据文件名查找这些模块。通常,查找是这样的:<type>:blah会寻找<type>s/blah,因此adapter:person它会寻找adapters/person

连接扩展了FileUploadAdapter(位于adapters/file-uploadPersonAdapter可以执行以下操作:

// adapters/person.js

import FileUploadAdapter from './file-upload';

export default FileUploadAdapter.extend();

您可以在应用程序的控制台中检查解析器:

// where `App` is the Global name for your app.
var applicationAdapter = App.__container__.lookup('adapter:application');
var personAdapter = App.__container__.lookup('adapter:person');

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Rhom的Ember-Data自定义适配器-FindAll不起作用

来自分类Dev

Ember JS:自定义适配器以包含多个参数

来自分类Dev

用于Ember Data的自定义适配器不起作用

来自分类Dev

Ember-多种型号的自定义适配器和序列化器

来自分类Dev

如何在ember cli生成的模型中设置rest适配器

来自分类Dev

Ember Cli Mirage:带有 JSONAPISerializer 的主动模型适配器

来自分类Dev

Ember 子目录模型与适配器更改?

来自分类Dev

Ember 如何使用多个适配器?

来自分类Dev

Ember自定义约定

来自分类Dev

如何在Elasticsearch中将自定义元数据与索引相关联?

来自分类Dev

将自定义数据与挥杆控件相关联?

来自分类Dev

在Ember中将灯具与LocalStorage适配器一起使用

来自分类Dev

Ember模型的create()未创建ID和适配器,必须实现“ createRecord”

来自分类Dev

如何从Ember数据适配器过渡到路由

来自分类Dev

使ember与Rails交互的问题,“无适配器”错误

来自分类Dev

具有Web套接字的Ember数据适配器

来自分类Dev

带有夹具适配器的Ember-Table

来自分类Dev

无法使用Ember更改适配器主机

来自分类Dev

在Ember-CLI中定义自定义Ember.Object

来自分类Dev

Ember CLI:自定义输入助手

来自分类Dev

在ember-cli中导入自定义库

来自分类Dev

阻止Ember获取相关模型

来自分类Dev

阻止Ember获取相关模型

来自分类Dev

将Ember模型设置为Ember对象

来自分类Dev

将Ember模型设置为Ember对象

来自分类Dev

ember cli使用的ember数据版本错误?

来自分类Dev

在Ember-CLI中升级Ember

来自分类Dev

Ember-CLI“ Ember更新”命令

来自分类Dev

Ember CLI模型测试失败