2016-06-15 6 views
3

В sencha touch 2 вызова модели. Save() на существующей записи запускает POST вместо PUT, как ожидалось.Sencha Touch 2 model.save использует POST вместо PUT в операции обновления

У меня есть следующие модели:

Ext.define('HomeInventory.model.Product', { 
    extend: 'Ext.data.Model', 

    config: { 
     idProperty: '_id', 
     fields: [ 
      { name: '_id', type: 'auto' }, 
      { name: 'name', type: 'string' }, 
      { name: 'barcode', type: 'string' }, 
      { name: 'creationDate', type: 'date' }, 
      { name: 'currentAmount', type: 'number' }, 
      { name: 'isActive', type: 'boolean'} 
     ], 
     validations: [ 
      {type: 'presence', field: 'barcode', message: 'Barcode is required'}, 
      {type: 'presence', field: 'name', message: 'Name is required'} 
     ], 
     proxy :{ 
      type: 'rest', 
      url: 'http://localhost:3000/products', 
      actionMethods: { 
       create: 'POST', 
       read: 'GET', 
       update: 'PUT', 
       destroy: 'DELETE' 
      }, 
     } 
    } 
}); 

Полезная нагрузка JSON содержит поле _id, как ожидается, для существующих записей, но отправляется на сервер, используя HTTP POST, вместо того, чтобы PUT:

{_id: "575bcd86c0eb22880c7e421e", name: "test product1", barcode: "1234", creationDate: null,…} 

Сохранение функции вызова внутри контроллера:

submitProduct: function(){ 
    Ext.Viewport.setMasked({ 
     xtype: 'loadmask', 
     indicator: true, 
     message: 'Saving product...' 
    }); 
    debugger; 
    var product = Ext.create('HomeInventory.model.Product'); 
    this.getProductView().updateRecord(product); 
    var validation = product.validate(); 
    if(validation.isValid){ 
     var me = this; 
     product.save({ 
      success: function(){ 
       Ext.Viewport.unmask(); 
       me.returnToMain(); 
     }, 
     failure: function(){ 
      Ext.Viewport.unmask(); 
      Ext.Msg.alert('There was an error updating the product'); 
      me.returnToMain(); 
     } 
     }); 
    }else{ 
     //Show validation error 
    } 
} 

Что здесь не так?

ответ

2

Ну, я нашел решение. Перед вызовом метода сохранения необходимо установить phantom = false.