我們最近從Ember切換到了Ember CLI,並且我無法找到將模型與自定義適配器關聯的適當約定。在Ember CLI中將自定義適配器與特定模型關聯起來
歷史 我們創造了有一個文件上傳作爲其創建路線的一部分,這樣的表單數據和二進制數據可能會在我們的後端API [軌]推到一個端點型號的適配器。適配器使用FormData對象將文件添加到請求。我選擇僅將此適配器用於包含文件的模型,並且使非應用程序適配器具有非文件上載模型。所以我想要這個應用程序支持多個適配器。
自定義適配器:在適配器 /文件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;
在「經典」灰燼,我能夠告訴燼通過這個約定使用特定的適配器上的模型:
//given a model name "Person", specific adapter via {ModelName}Adapter
App.PersonAdapter = App.FileUploadAdapter.extend();
但現在我們在Ember CLI中沒有這些全局對象,有沒有辦法指定一個適配器?我假設我將在導出模型之前將模型分配給一個變量,並在那裏執行其他設置。
我希望適應燼類的範例,所以請讓我知道如果你覺得這太離譜了吧。我可以重新使用一個適配器並在其中進行文件檢測,但將自定義功能分離爲多個適配器會感覺更清晰。
謝謝!
神奇而徹底的答案。這是一個很好的點燃燼和es6 mondules的結構。 – 2014-09-04 05:03:45