-1

jQueryウィジェットのオプションとしてこれがあるとします:

    function oneFunc()
    {
     var myVar;

       //there is some widget calling
       $.widget("ui.combobox", $.ui.autocomplete, {
                options: {
                       source: function (request, response){////doing something with myVar, request and response}
                }
       });
    }

function (request, response)ここで、 using コールバックを分離したいと思います

だから、私はこのようなものが欲しい:

function oneFunc()
{
     var myVar;
     //there is some widget calling
        $.widget("ui.combobox", $.ui.autocomplete, {
                options: {
                       source: myCallBack
       });
}

function myCallBack(request, response){
//I can get request and response here by default but not myVar
//doing something with myVar, request and response
}

そのため、myVar にアクセスできません。私はそれをそこに渡さなければなりません。しかし、それを行う方法は?

編集:requestグローバル変数を 使用したくありませ responseん。とにかく myCallBack で取得できるデフォルト値です。

匿名関数を避けることができればより良いです。

4

3 に答える 3

2

Function.applyまたはを使用してこれを行うことができますFunction.call

function oneFunc(myCallback)
{
     this.myVar = 1;
    var request = "request";
    var response = "response"
     //there is some widget calling
     myCallback.apply(this,[request,response]);
}

function callback(request, response){
   console.log(request);
    console.log(response);
    console.log(this.myVar);
}

oneFunc(callback);

上記の出力

request
response
1

キーワードをコールバック メソッドに委任したthisため、元のメソッドで宣言された変数にアクセスできます。

実際の例: http://jsfiddle.net/hFsCA/

このapply行は (@AlessandroVendruscolo に感謝) に置き換えることもできます。

myCallback.call(this,request,response);

違いが大きすぎるというわけではありませんが、完全を期すために!

したがって、それを(現在更新された)例にラップします:

function oneFunc(callback)
{
   this.myVar = 1;
   var self = this;
   //there is some widget calling
   $.widget("ui.combobox", $.ui.autocomplete, {

            options: {
                 source: function (request, response){
                        callback.call(self,request,response);
                 }
            }
   });

}
于 2013-07-08T11:50:31.447 に答える