2010-11-26 10 views
0

私はこのJSコードを持っています。 loadStemUrl値をloadStructメソッドからコールバック関数に渡す必要があります。 loadStructは、使用しているJSフレームワークの関数です。Javascript - 値をコールバックに渡す

この例では、コールバック関数の内部スコープで定義されていないloadItemUrl値があります。この例では

Form.prototype.Create = function (loadItemUrl) { 

    var dhxForm = new dhtmlXForm(this.divId); 

    dhxForm.loadStruct(this.url, function() { 

     if (loadItemUrl) 
      this.load(loadItemUrl); 

    }); 
} 

答えて

2

loadItemUrlundefinedの場合は、それを呼び出すときに定義された値をForm.Createに渡さないためです。

コールバック関数はCreate関数のスコープで定義されているため、そこに存在する変数にアクセスできます。

1

コールバック関数の内部スコープで未定義loadItemUrl値です。

私は答えはではありません、その場合には、あなたの質問、だと仮定しています。 loadItemUrl引数は、外部関数ブロックのローカル変数としてスコープされているため、内部関数ブロックからアクセスできます。

あなたが持っているコードはloadItemUrl引数が正しくForm.prototype.Create関数に渡されると仮定すると、正常に動作する必要があります。

1

パラメータloadItemUrlは、コールバック関数(この場合はclosure)にアクセスできます。ただし、匿名コールバック関数の実行コンテキストでは、thisという値は、loadStructの実装によって完全に決定されます。それを解決する1つの方法は、JSの閉鎖能力の更なる利点を活用し、loadが正しいオブジェクトで呼び出されていることを確認します

var dhxForm = new dhtmlXForm(this.divId); 
var self = this; 

dhxForm.loadStruct(this.url, function() { 

    if (loadItemUrl) 
     self.load(loadItemUrl); 
}); 

を行うことです。

関連する問題