2011-05-01 16 views
1

私の未経験を許していますが、ここでは問題があります。私はそれらのうちの1つで2つの関数を呼び出しています.getJSONと、最初の関数のgetJSONコールバック..私は多くの問題を抱えています。JavaScript、スコープの問題... JavaScriptであまり経験はありません

ここでは、何が起こっているのかを簡略化したものです。

MyDialog.Widget.prototype._myFunction1 = function(data) { 
var self = this; 

var renderEntry = function(tr,booltf) { 
    $('<a href="javascript:{}">&nbsp;</a>') 
      .addClass("iconbutton") 
      .appendTo(tr.insertCell(0)) 
      .click(function() { 
       $.getJSON(
        "/command/button", 
        null, 
        function(data) { 
             self.myFunction2(); //self isn't in scope? 
             //this.myFunction2(); //this is actually 'this' for XHR request 
        }, 
        "json" 
       ); 
      }); 
//more code here (including the invoking of renderEntry() 
} 

MyDialog.Widget.prototype.myFunction2 = function() 
{ 
//Ton of code 
} 

問題は.getJSONのコールバック関数である、私はmyFunction2を呼び出したいが、私はそれを呼び出すために取得することはできません...使用して「this.myFunction2()」私がアクセスしようとしていますXHRリクエスト内の 'my​​Function2'(これはFirebugを通して見るものです)、以前に作成したvar 'self'を使用しても動作しません。これはスコープ内にないため、Firebugは変数を表示しませんコールバック関数の中では 'self'です。もちろん、試してみるとうまくいきません。

アイデア?それ以上の精緻化は必要ですか?

+0

もし 'self'がスコープ内になければ' self.something'をしようとするとエラーになります。多分あなたの問題は他に何かありますか? – hugomg

答えて

-1

ここで、renderEntry()を呼び出していますか?これがコードの重要な部分です。 renderEntry()関数が呼び出されたときに初期化されていないため、自己を認識しません。自己は_myFunction1を呼び出すと初期化され、関数の実行が終了するとデッド状態になります。

あなたはにそれを呼び出すのみ renderEntry機能を初期化していないことを実現していますか?

+0

ここにもっとコードがあります –

+0

「死んでしまった」という意味はありません.JSには当てはまらないという強い疑念があります。 – julkiewicz

5

あなたのコードは範囲に関して問題ありません。 selfは範囲内にあり、あなたが望むようにthisを参照してください。 ローカルの関数スコープには含まれていないため、デバッガで表示されない場合がありますが、正しく解決されないというわけではありません。次のように

単純なケースを簡単に証明することができる。

var foo = { 
    fn: function(){ console.log('Called!'); }, 
    invoker: function(){ 
     var self = this, 
      local = function(){ setTimeout(function(){ 
        setTimeout(function(){ self.fn(); }, 1000); 
        }, 1000); }; 
     local(); 
    } 
}; 

foo.invoker(); 
  • はあなたの要求が成功していることを確認します。
  • 引数($.getJSONには3つのパラメータしかありません)を削除します。
  • コードを投稿してください。
関連する問題