6

Ext.data.Store新しいを作成するときに、インスタンスで例外を処理しようとしていますExt.data.Record。サーバーが次のjsonで応答した場合:

{"success": false, "message": "some text"}

サーバーがHTTP200応答を返しても、タイプ'request'の例外が発生します。

'リモート'エラーを取得するには、rootプロパティを使用してオブジェクトを作成する必要があります

({
    "success": false,
    "message": "some text",
    "data": {
        "PositionId": "00000000-0000-0000-0000-000000000000",
        "Name": "123"
    }
})

...しかし、私はこれを望んでいません。この動作を変更する方法はありますか?

また、ストアにレコードを挿入すると、関連付けられたグリッドに自動的に追加されますが、エラーが発生した場合はそこに残るため、エラーが発生するたびにストアをリロードする必要があります。これを行うためのより良い方法はありますか?

4

3 に答える 3

11

2つのストアイベントのいずれかをキャッチする必要があります。

  1. loadexception(非推奨)
  2. exception

たとえば、次のことができます。

// make the store
var myStore = new Ext.data.Store({...});
// catch loading exceptions
myStore.on('exception',function( store, records, options ){
    // do something about the record exception
},this);
// load store
myStore.load();

ストアからの成功イベントと失敗イベントを使用して、成功フラグに基づいてアクションを実行することもできます。

于 2011-03-30T21:14:07.257 に答える
4

最後に、空のデータを返送すると、期待どおりに機能することがわかりました。したがって、架空のデータを返送する必要はありません。サーバーの応答は次のとおりです。

({
    "success": false,
    "message": "some text",
    "data": {}
})
于 2011-04-04T06:42:41.213 に答える
0

成功が偽の場合、操作には応答プロパティがありません。このスレッドはそれを非常にわかりやすく説明しています!

http://www.sencha.com/forum/showthread.php?196013-access-operation.response-when-success-false

例:

Ext.define("SC.store.SegurosCancelacionStore", {
    extend: "Ext.data.Store",
    model: "SC.model.PersonaSeguro",
    proxy: {
        timeout: 90000,
        actionMethods: {
            read   : 'POST'
        },
        type: "ajax",
        url: "../SegurosFinsolCancelacionServlet",
        reader: {
            type: "json",
            root: "seguros",
            messageProperty : 'msjError' //without this, it doesn't work
        }
    },
    autoLoad: false
});

実装:

storeSegurosCancelacion.load({
                params: {
                    'sucursal':sucursal,
                    'persona': persona
                },
                callback:function(records, operation, success){
                    msg.hide();
                    if(success == true){
                        if(records.length == 0){
                         Ext.Msg.alert('Resultado', 'No se ha encontrado información');
                        }
                    }
                    if(success == false){
                        try{
                             Ext.Msg.alert('Error', operation.getError()); // way more elegant than ussing rawData etc ...
                        }catch(e){
                                Ext.Msg.alert('Error', 'Error  inesperado en el servidor.');
                        }
                    }
                }
            });

よろしく@code4jhon

于 2014-05-12T23:32:54.420 に答える