问题描述
||
我在dojo对话框中使用闭包来防止函数和变量冲突。
我有一个包含复杂对话框的jsp页面。它主要在工作。只是一个非常烦人的细节。如果窗口小部件更改,如何通知处理程序方法?我们希望将对话框的大部分Java脚本保留在闭包内。
由于弹出窗口出现在多个位置,因此我希望将来的程序员能够用任何东西替换myVar。有没有一种方法可以确定正确放置在onChange中的内容
------ jsp页面-----
var myVar = new MyNewPopupStuff(42);
myVar.contstrucDialog();
......
includeTemplate template = \“ myDialog.jsp \”
.....
-------- myDialog.jsp ----
<脚本类型= \“ text / javascript \” src = \“ my.js \” />
.....
<\\ / div>
....
-------- my.js文件----
函数MyNewPopupStuff(param){
this.contstrucDialog = function()
.......
同时(要添加更多小部件){
fieldHolder = dojo.byId(\“ myDialogData \”
addWidget(widgetName,myDialogData);
}
addWidget = function(fieldHolder,widgetName){
//需要在\“ myVar.bar()\”中打印变量的名称(myVar或其他可能的值)
dojo.place(newLabel,fieldHolder);
var newField = new dijit.form.ValidationTextBox({
id:\“ i \” + contactTypeId,
名称:widgetName,
价值:价值,
修剪:是的,
** onChange:** ??????当小部件被修改时,我想调用下面的ModifyOnChange而不是其他一些对修改的修改,我想我想要像myVar.modifyOnChange之类的东西?
});
}
this.modifyOnChange = function()
{
警报(\“修改\”);
}
}
解决方法
如果您使用的框架为功能实现EcmaScript 5绑定方法,请使用:
onChange: modifyOnChange.bind(this),
否则自己实现:
onChange: (function(self) {
return function() {
return modifyOnChange.apply(self,arguments);
}
})(this),
myVar.modifyOnChange
可能有用,但是如果将代码绑定到希望持有该对象的全局对象,那么将东西抽象到类中的意义何在?如果有人要添加另一个MyNewPopupStuff对象,该怎么办?