0

残りのプロキシを使用して既存のモデルインスタンスを更新する適切な方法が見つからない場合、Sencha TouchはPOSTの代わりにPUTをRESTバックエンドに送信します。モデルインスタンスをSencha Touch 2で残りのプロキシで更新する適切な方法

私はそれらのステップに従っ:

最初から新しいproyectoのを生成します。 Test.jsモデル内

sencha generate model Test id,feld1 

設定idProperty、残りプロキシ:次に、煎茶のコマンドを使用して新しいモデルを追加

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

はその後

models: [ 
     'Test' 
] 

をapp.jsするために、このモデルを追加します、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'); 
      } 
     }): 
    } 

これにより、PUTで​​はなく、バックエンドサーバーへのPOST要求が更新され、既存のモデルインスタンスが予想どおりに生成されます。 idPropertyField(id)がnullでも空でもないので、Senchaはそれが既存のインスタンスであることを知っていると仮定しています。

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

Sencha Touchで既存のモデルインスタンスをRESTプロキシを使用して更新する適切な方法はありますか? POSTの代わりにPUTリクエストを発動させるにはどうすればいいですか?

答えて

1

保存する前ににレコードのphantomプロパティを設定すると、新しいレコードではなく更新されたレコードとして取得されます。

例として、このバイオリンをチェックアウト:https://fiddle.sencha.com/#fiddle/1cd1

をあなたはExt.data.Modelsave方法(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

おかげで。不思議なことに、私は成功する前にそれを試しました。おそらくキャッシュされたスクリプトです。 idプロパティがnullであるか、手動で常時設定する代わりに自動的に空の場合に、ファントムプロパティをfalseにする方法はありますか? – Oscar

+1

モデルクラスのsetメソッドをオーバーライドし、idPropertyと一致するフィールドを確認し、ファントムをfalseに更新できます。 – Stuart

+0

素晴らしいです。あなたの時間と助けてくれてありがとう。 – Oscar

関連する問題