2017-06-21 9 views
1

model.erase({失敗、成功...})を呼び出すと、サーバーがHTTP StatusCode 500で応答してもモデルが削除されます。障害リスナーが正しくトリガーされますが、私はモデルが破壊されないことを期待します。私はそれが店から取り除かれるので、それが破壊されているのがわかります。サーバーエラー時にもSencha extjs model.eraseはモデルを削除します

var rec = store.getAt(index); 
rec.erase({ 
    success:function(record, operation){ 
     // Do something to notify user knows 
    } 
    failure:function(record, operation){ 
     // correctly triggered when HTTP = 40x or 50x 
     // Would expect that record is still in store. Why not? 
     // Of course i could add it again to store with store.add(record) but is that the prefered way? 
    } 
}); 

私は

答えて

2

eraseのExtJS 6.0でAJAXプロキシーを使用していますと、ここでは本当に関係ありません。 eraseを呼び出すとモデルdropが呼び出され、保留中の削除とマークされ、どのストアからも削除されます。サーバーがサーバーからそれを削除できなかったからといって、必ずしもストアに戻すことを意味するわけではありません。それはまだ削除が保留中です。

+0

だから何がこのケースをキャッチするための最良の方法だろうか? – Rob

+1

モデル上で 'reject 'を呼び出して、削除された状態をリセットし、それが起こった場合には店舗に再追加します。 –

+0

さて、わかりました。すでにそれを推測しましたが、別の位置に追加されています。 extjsの方が良い方法はありますか? – Rob

3

はい、eraseメソッドは、サーバーの応答を待つことなく、すぐにストアからレコードを削除します。

  • レコードのdroppedプロパティをtrueに設定すると、「ハックな」方法でシナリオが処理されます。
  • saveメソッドを使用してレコードを保存します(削除要求が生成されますが、そのレコードはストアに保存されます)。
  • 成功するとストアからレコードを削除し、droppedプロパティをfalseにリセットします。

    var rec = store.getAt(index); 
    rec.dropped = true; 
    rec.save({ 
        success: function() { 
         store.remove(rec); 
         // Do something to notify user knows 
        } 
        failure: function() { 
         rec.dropped = false; 
        } 
    }); 
    
関連する問題