5

ajaxリクエストを介してデータを返すストアロードメソッドがあります。Firebugを使用してデータが返されていることがわかりますが、成功ハンドラーが呼び出されていません。

    this.getCategoriesStore().load({params:{'id':d.data.category_id}}, {
        success: function(category) {
            console.log("Category: " + category.get('name'));
        },
        error: function(e) {
            console.log(e);
        }
    });

データとともに成功パラメータを返します。

{"success":true,"categories":{"id":5,"name":"Frying","section_id":2}}

何か足りないものがありますか、それとも私は何か間違ったことをしていますか?

4

2 に答える 2

20

さて、あなたはこれを探していると思います:

store.load({
    params:{'id':d.data.category_id},
    scope: this,
    callback: function(records, operation, success) {
        if (success) {
            console.log("Category: " + category.get('name'));
        } else {
            console.log('error');
        }
    }
});

APIで、追加のパラメーターをそこに配置できることはそれほど明白ではありません。しかし、ExtJSは多くの場合、構成オブジェクトを使用して物事をまとめます。

コメントに答えるために編集:

簡単な答えは:はい

現在、より長いバージョン:ストアの場合、匿名(または具体的な)コールバックを直接提供するか、イベントを登録するのはあなた次第です。ここでの状況では、どちらも同じように機能します。

ただし、多くのイベントを持つことができるのに対し、コールバックは1つしか持つことができません。さらなるシナリオでは、イベントがはるかに適している状況、またはイベントがまったく唯一の方法である状況が見つかります。あなたが聞いているとき、それは常に当てはまります。これに関するいくつかの注意事項は次のとおりです。

  • コールバックが1回だけ必要な場合は、{single:true}プロパティを使用してください。例:store.on('load', function(s) { /* do something*/ }, scope, { single: true })リスナーは、呼び出された後に削除されます。これは、削除できない匿名関数を使用するために必要な原因です。
  • クラス定義でリスナーを直接バインドするほとんどの場合、mon()を使用して、リスナーがクラスのインスタンスとともに破棄されるようにします。

どちらもブラウザのメモリを節約します。

于 2012-11-13T07:16:17.693 に答える
6

これを試して:

store.load({
    scope: this,
    callback: function(records, operation, success) {
        // the operation object
        // contains all of the details of the load operation
        console.log(records);
    }
});

http://docs.sencha.com/ext-js/4-1/#!/api/Ext.data.Store-method-loadドキュメントによると、成功とエラーのコールバックはありません。

コールバックを提供する別の方法として、同じ効果を得るためにストアに「ロード」イベントリスナーを追加することもできます。

于 2012-11-12T23:33:53.677 に答える