2013-09-17 6 views
4

Как обновить или удалить запись с помощью глагола POST с помощью Ember RESTAdapter? По умолчанию он отправляет json, используя PUT или DELETE. Отправка с использованием этих глаголов заблокирована для того, где я работаю.Как отправить POST вместо PUT или DELETE в Ember?

Я как бы надеялся, что смогу сделать Rails, где вы отправите POST, и сообщите ему, тайно ли это PUT или DELETE, используя дополнительную метаинформацию.

Я работаю с Ember 1.0.0 и ember-data 1.0.0beta2 через RESTAdapter.

ответ

8

Я думаю, что переопределение DS.RESTAdapterupdateRecord и deleteRecord может работать:

DS.RESTAdapter.reopen({ 
    updateRecord: function(store, type, record) { 
    var data = {}; 
    var serializer = store.serializerFor(type.typeKey); 

    serializer.serializeIntoHash(data, type, record); 

    var id = Ember.get(record, 'id'); 

    return this.ajax(this.buildURL(type.typeKey, id), "POST", { data: data }); 
    }, 
    deleteRecord: function(store, type, record) { 
    var id = Ember.get(record, 'id'); 

    return this.ajax(this.buildURL(type.typeKey, id), "POST"); 
    } 
}); 
+1

Спасибо очень много! Хотя ваш ответ задал мне правильный путь, в конце концов мне пришлось переопределить оболочку Embers ajax вместо этого (this.ajax() в примере кода), а не updateRecord() или deleteRecord(), чтобы я мог добавить форму атрибут {_method = 'PUT'} "с типом контента, который будет принимать Rails. Но я не указал явно, что ответ должен был быть Rails-совместимым, поэтому Accepted Answer отправляется вам sir! –

+0

Добро пожаловать. Rails использует метод _method = «PUT», потому что форма в браузерах не поддерживает PUT. В ajax все будут работать. –

2

Вы можете переопределить ajaxOptions на RESTAdapter: синтаксис

DS.RESTAdapter.reopen({ 
    ajaxOptions: function(url, type, hash) { 
     hash = hash || {}; 

     if (type === 'PUT' || type === 'DELETE') { 
      hash.data = hash.data || {}; 
      hash.data['_method'] = type; 
      type = 'POST'; 
     } 

     return this._super(url, type, hash); 
    } 
}); 
0

Это для Ember 2.7.3 и Ember Data 2.7.0

export default DS.RESTAdapter.extend({ 
    updateRecord: function(store, type, snapshot) { 
    let id = snapshot.id; 
    let data = this.serialize(snapshot, { includeId: true }); 
    const urlForQueryRecord = this.buildURL(type.modelName, id, snapshot, 'updateRecord'); 

    return this.ajax(urlForQueryRecord, 'POST', { data: data }); 
    } 
}) 

Пожалуйста, обратите внимание на изменение type.typeKey к type.modelName

Смежные вопросы