2010-11-26 58 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是正确的对象上调用。