2010-11-26 59 views
0

我有這個JS代碼。我需要將loadItemUrl值傳遞給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的實現決定。解決這個問題的方法之一是採取JS的封閉能力進一步的優點,做

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

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

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

這將確保load是正確的對象上調用。