0

次のメソッドをオブジェクトに追加しました:

loadAPIServiceData : function(service, format, term, callback) {
        return $.when($.ajax({
            url: service + ((term) ? term : '') + '?format=' + format
        })).done(function(result) {
            return callback.apply(result, [ result ]);
        });
    },

コールバック関数には、データをロードするときにチェーンのさらに下流で必要な1つのパラメーターが渡されます(result明らかに、AJAX呼び出しから取得したものはすべて取得されます)。私が必要としているのは、コールバック関数が呼び出されたときにさらにパラメーターを追加しresult、そこにまだパラメーターを追加できるようにすることです:)

それについてより明確にするために、これは私が「コールバック関数が呼び出されたときにさらにパラメーターを追加できるようにする必要があり、それでもresultそこにある」と言ったときに私が意味していたことです。

var test = loadAPIServiceData('some_service', 'json', 'some_term', function(result, another_parameter, ...) {

});
4

2 に答える 2

1

:を変更することなく、引数の適用にバインドを使用できます。loadAPIServiceData

function myCallback(arg1, arg2, result) {
    //
}

loadAPIServiceData(service, format, term, myCallback.bind(this, arg1, arg2));

最初の引数の位置を維持したい場合result、このコードは、argumentsオブジェクトを使用して、すべての追加の引数をコールバックに送信します。

loadAPIServiceData : function(service, format, term, callback) {
    var add_args = Array.prototype.slice.call(arguments, 4);

    return $.when($.ajax({
        url: service + ((term) ? term : '') + '?format=' + format
    })).done(function(result) {
        return callback.apply(this, result, [ result].concat(add_args));
    });
},

function myCallback(result, arg1, arg2) {
    //
}

loadAPIServiceData(service, format, term, myCallback, "arg1", "arg2");
于 2012-11-10T14:22:05.643 に答える
0

私があなたの質問を正しく理解したかどうかはわかりませんが、これは理にかなっていますか?

function addOptionalParams(result) {
    var params = [];
    params.push(result);

    // do logic to decide if you need more params
    // if you need more params, push them to the params array
    if(weNeedMoreParams) {
        params.push('foo');
        params.push('bar');
    }

    return params;
}

loadAPIServiceData : function(service, format, term, callback) {
    return $.when($.ajax({
        url: service + ((term) ? term : '') + '?format=' + format
    })).done(function(result) {
        var callbackArgs = addOptionalParams(result);

        return callback.apply(this, callbackArgs);
    });
},

これは、コールバックを呼び出すパラメーターを決定する「done」関数です。

于 2012-11-10T13:52:48.300 に答える