0

Je ne trouve pas de manière appropriée de mettre à jour une instance de modèle existante en utilisant un proxy de repos, Sencha Touch envoie toujours un PUT au lieu de POST au backend REST.Façon correcte de mettre à jour une instance de modèle avec un proxy de repos dans Sencha Touch 2

J'ai suivi ces étapes:

générons une nouvelle Proyecto à partir de zéro. Ensuite, ajoutez un nouveau modèle en utilisant la commande sencha:

sencha generate model Test id,feld1 

Set idProperty et proxy repos à l'intérieur modèle Test.js:

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

Ajouter ce modèle à app.js

models: [ 
     'Test' 
] 

Ensuite , à l'intérieur de la fonction de lancement de 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'); 
      } 
     }): 
    } 

Cela provoque une demande POST au serveur principal, au lieu d'un PUT, comme prévu lors de la mise à jour et de l'instance de modèle existante. Je suppose ici que Sencha sait qu'il s'agit d'une instance existante car idPropertyField (id) n'est pas nul ou vide.

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

Quelle est la bonne façon de mettre à jour une instance de modèle existant dans Sencha Touch utilisant un proxy REST? Comment faire déclencher une requête PUT au lieu de POST?

Répondre

1

Si vous définissez la propriété phantom de l'enregistrement sur false avant de l'enregistrer, il sera ramassé en tant qu'enregistrement mis à jour plutôt que nouveau.

Vérifiez ce violon comme un exemple: https://fiddle.sencha.com/#fiddle/1cd1

Si vous regardez la méthode de saveExt.data.Model (http://docs.sencha.com/extjs/6.0.1-classic/src/Model.js-1.html#Ext.data.Model-method-save) vous pouvez voir comment cela est déterminé. Essentiellement, cela se résume à cette ligne:

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

Il existe une méthode de filtrage similaire dans la classe Ext.data.ProxyStore qui gère cela pour synchronisations magasin - http://docs.sencha.com/extjs/6.0.1-classic/Ext.data.ProxyStore.html#method-filterNew

+0

Merci pour votre réponse. Étrangement, j'ai essayé cela sans succès, peut-être un script en cache. Existe-t-il un moyen de rendre la propriété fantôme renvoyée false lorsque idProperty est vide ou vide automatiquement au lieu de devoir le définir manuellement tout le temps? – Oscar

+1

Vous pouvez substituer la méthode set de la classe model et vérifier le champ correspondant à idProperty, puis mettre fantôme à false. – Stuart

+0

Génial. Merci pour votre temps et votre aide. – Oscar