2011-11-02 9 views
6

からExtJSのメッセージを読む:私はAJAXプロキシとJSONリーダーでExtJSの店を持っているAjaxの店

Ext.create('Ext.data.Store', { 
    proxy: { 
     type: 'ajax', 
     url: '...', 
     reader: { 
      type: 'json', 
      root: 'data', 
      totalProperty: 'totalCount', 
      messageProperty: 'message', 
      successProperty: 'success' 
     }, 
    ... 

これは私がサーバーから得るものです:

data: [...] 
message: "I want to read this string after the store is loaded" 
success: true 
totalCount: x 

は今、私がアクセスしたいですストアがロードされているときの「メッセージ」 - どこで入手できますか?私はたくさん見えましたが、私はフックする場所を見つけることができませんか?プロキシの唯一のリスナーは例外です。それは本当に私を助けません。

答えて

5

利用店舗loadイベント:

Ext.create('Ext.data.Store', { 
    listeners: { 
    'load': function(store, records, successful, operation) { 
     alert(operation.resultSet.message); 
    } 
    }, 
    proxy: { 
    // ... 

UPDATE

loadイベントのドキュメントが間違っていることが表示されます。引数の正しいリストは(store, records, successful)操作引数なし)です。したがって、上記の解決策は機能しません。

しかし助けることができる読者のrawDataプロパティがあります:

Ext.create('Ext.data.Store', { 
    listeners: { 
    'load': function(store, records, successful) { 
     alert(store.getProxy().getReader().rawData.message); 
    } 
    }, 
    proxy: { 
    // ... 
+0

おかげで、私はもちろんの負荷リスナーを試してみましたが、私は、 'resultSet'を知りませんでした操作中です。しかし、とにかく操作オブジェクトにストアリスナーメソッドが含まれています(私は事前ロードとロードがあります)、resultSetにアクセスしようとすると定義されません。私はExtJS 4.0.2aを使用しています。何か案が?あなたのソリューションは完璧です - 私のプロジェクトではうまくいくでしょうか?ExtJSのどのバージョンを使用していますか? – Marc

+0

@Marc、奇妙なことですが、操作引数がロードイベントハンドラに渡されないようです(ただし、ドキュメントには渡す必要があります)。しかし私は別の解決策を見つけました。私の答えを更新しました。 –

+0

パーフェクト、ありがとうございました! – Marc

0

私の答えはのExtJS 4.1.x.に適用されます私はコードを読むのに時間を費やしました。これを行う方法の1つは、loadイベントを処理する代わりにstore beforeloadイベントでコールバックを提供することです。コールバックには元のリクエストパラメータを含む操作オブジェクトが渡され、成功した場合はresultObjectプロパティの下にレスポンスオブジェクトとデータ(解析済み)が格納されます。他の場合には

0

myStore.load({ 
    callback : function(object, response, success) { 
    // on error response: success = false 
    if(!success) { 
     // i don't remember de correct path to get "message" or "responseText" 
     console.log(response.response.responseText); 
    } else { 
     ... 
    } 
}); 

CYA!

0

私は手動でロードし、ここでは、イベントを使用していないが、私は次のようにメッセージが表示されます:

var initData = Ext.create('My.data.SomeAjaxStore'); 

initData.load(function(records, operation, success) { 
    if (!success || operation.hasException()) { 
    // Here is your message from server 
    // In case of HTTP error you get: 
    // { 
    // status: 404, 
    // statusText: "Not Found" 
    // } 
    var error = operation.getError(); 
    Ext.log({msg:[Ext.getClassName(me), ": Command failure: ", error].join(""), level:"error"}); 
} 
関連する問題