1

belongsTo 関連付けで生成された getter 関数を呼び出します。

        token.getUser({
            callback: function(user, operation) {
                console.info('getUser callback');
                Ext.Viewport.unmask();
                console.dir(operation);
            },
            failure: function(user, operation) {
                console.info('getUser failure');
            },
            success: function(user) {
                console.info('getUser success');
            }
        });

私のコンソールには次のように表示されます。

getUser success Auth.js:74
getUser failure Auth.js:69
getUser callback Auth.js:64
undefined

誰かがこれがどのように機能するか教えてもらえますか? ドキュメントはあまり役に立ちません。

4

1 に答える 1

2

間違いなくバグです。createGetterメソッドのコードを見てください。

        if (options.reload === true || instance === undefined) {
            ...
        } else {
            args = [instance];
            scope = scope || model;

            Ext.callback(options, scope, args);
            Ext.callback(options.success, scope, args);
            Ext.callback(options.failure, scope, args);
            Ext.callback(options.callback, scope, args);

            return instance;
        }

関連付けられたモデルが既に読み込まれている場合、すべてのコールバックが無差別に呼び出されます。

キャッシュされたインスタンスに対して 2 番目の引数が呼び出されないことがわかるため、次の回避策を使用できます。

token.getUser({
    callback: function(user, operation) {

        // independent of success

        if (operation) {
            if (operation.wasSuccessful()) {
                // successful load
            } else {
                // failed load
            }
        } else {
            // retrieved from the cache (indicates previous success)
        }
    }
});
于 2013-06-12T10:29:31.987 に答える