0

Я не могу найти подходящий способ обновления существующего экземпляра модели с помощью прокси-сервера для отдыха, Sencha Touch всегда отправляет PUT вместо POST на сервер REST.Правильный способ обновления экземпляра модели с помощью прокси-сервера для отдыха в Sencha Touch 2

Я последовал за эти шаги:

сгенерирует новый PROYECTO с нуля. Затем добавьте новую модель с помощью команды Сенча:

sencha generate model Test id,feld1 

Set idProperty и прокси остальное внутри Test.js модели:

idProperty: 'id', 
proxy :{ 
      type: 'rest', 
      url: 'http://localhost:3000/products' 
} 

Добавить эту модель app.js

models: [ 
     'Test' 
] 

Тогда , внутри функции запуска app.js:

launch: function() { 
     var test = Ext.create('test.model.Test'); 
     test.set('id', '1'); 
     test.set('feld1', 'some text'); 
     test.save({ 
      success: function(){ 
       console.log('Ok'); 
      }, 
      failure: function(){ 
       console.log('Ko'); 
      } 
     }): 
    } 

Это вызывает запрос POST на серверный сервер вместо PUT, как и ожидалось при обновлении и существующий экземпляр модели. Я предполагаю, что Sencha знает, что это уже существующий экземпляр, поскольку idPropertyField (id) не является нулевым или пустым.

Request URL:http://localhost:3000/products?_dc=1466427599915 
Request Method:POST 
Request Payload: {id: "1", feld1: "some text"} 

Каков правильный способ обновления существующего экземпляра модели в Sencha Touch с использованием прокси-сервера REST? Как заставить его запускать запрос PUT вместо POST?

ответ

1

Если вы установили свойство phantom записи на false перед сохранением, он будет выбран как обновленная запись, а не новая.

Проверить эту скрипку в качестве примера: https://fiddle.sencha.com/#fiddle/1cd1

Если посмотреть на save метода Ext.data.Model «s (http://docs.sencha.com/extjs/6.0.1-classic/src/Model.js-1.html#Ext.data.Model-method-save) вы можете увидеть, как это определено. По сути, это сводится к этой линии:

action = dropped ? 'destroy' : (phantom ? 'create' : 'update'), 

Существует аналогичный метод фильтрации в Ext.data.ProxyStore класса, который обрабатывает это для магазина синхронизаций - http://docs.sencha.com/extjs/6.0.1-classic/Ext.data.ProxyStore.html#method-filterNew

+0

Спасибо за ваш ответ. Как ни странно, я пробовал это раньше, без успеха, возможно, в кешированном скрипте. Есть ли способ заставить фантомное свойство возвращать false, когда idProperty имеет значение null или пусто, вместо того, чтобы вручную устанавливать его вручную? – Oscar

+1

Вы можете переопределить метод set класса модели и проверить поле, соответствующее idProperty, а затем обновить фантом на false. – Stuart

+0

Awesome. Спасибо за ваше время и помощь. – Oscar

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