用dojo.hitch避免闭包使用的一种方法
2011-01-04 13:30
232 查看
在使用Dojo的web应用中,经常会用dojo.connect绑定事件到DOM树上。
比如需要绑定一个事件到按钮"Show Text"上,当点击它时,在id为"content"的div中显示hello world.
<body>
<input type="button" id="confirm" value="Show Text"/>
<div id="content">content</div>
</body>
一种普遍的写法是:
<script type="text/javascript">
function test(){
var id = "content";
dojo.connect(document.getElementById("confirm"), "onclick", function(){
var text = "hello world";
document.getElementById(id).innerHTML = text;
});
}
test();
</script>
这儿click事件的处理形成了一个闭包。
由于多种原因,闭包在某些场合并不被推荐使用。而在很多情况下,也需要将处理的代码抽象成一个单独的函数以供重用。
函数抽象不难,麻烦的是怎样将函数用到的外部变量也能传进去。比如代码中的闭包调用了外部变量"id",需要将其传入抽象出来的函数中。这儿dojo.hitch就可以被派上用场了:
<script type="text/javascript">
function test(){
var id = "content";
dojo.connect(document.getElementById("confirm"), "onclick", dojo.hitch(this, "showContent", id));
}
function showContent(id){
var text = "show something";
document.getElementById(id).innerHTML = text;
}
test();
</script>
比如需要绑定一个事件到按钮"Show Text"上,当点击它时,在id为"content"的div中显示hello world.
<body>
<input type="button" id="confirm" value="Show Text"/>
<div id="content">content</div>
</body>
一种普遍的写法是:
<script type="text/javascript">
function test(){
var id = "content";
dojo.connect(document.getElementById("confirm"), "onclick", function(){
var text = "hello world";
document.getElementById(id).innerHTML = text;
});
}
test();
</script>
这儿click事件的处理形成了一个闭包。
由于多种原因,闭包在某些场合并不被推荐使用。而在很多情况下,也需要将处理的代码抽象成一个单独的函数以供重用。
函数抽象不难,麻烦的是怎样将函数用到的外部变量也能传进去。比如代码中的闭包调用了外部变量"id",需要将其传入抽象出来的函数中。这儿dojo.hitch就可以被派上用场了:
<script type="text/javascript">
function test(){
var id = "content";
dojo.connect(document.getElementById("confirm"), "onclick", dojo.hitch(this, "showContent", id));
}
function showContent(id){
var text = "show something";
document.getElementById(id).innerHTML = text;
}
test();
</script>
相关文章推荐
- javascript 处理HTML元素必须避免使用的一种方法
- javascript处理HTML元素必须避免使用的一种方法
- javascript 处理HTML元素必须避免使用的一种方法
- 使用Dojo实现页面不刷新提交数据时避免前台缓存的方法
- 使用dojo框架出现错误"SyntaxError: Unexpected token <"中的一种解决方法
- javascript 处理HTML元素必须避免使用的一种方法
- 一种使用Microsoft ActiveSync 4.5进行WINCE的同步时避免电脑死机的方法
- Android-避免出现bitmap内存限制OUT OF MEMORY的一种方法
- Java基础四:避免使用finalize()方法
- 使用aidl隐式调用service出现service intent must be explicit 问题的一种解决方法
- java应用避免NullPointerException的最佳方法@NotNull的使用
- 父类的正常成员函数子类可以使用,并不是继承下来 的,子类是怎么调用父类的函数 : 可能是利用了一种叫函数名联编的方法.没有隐藏的情况下用函数名字来决定调用的函数.
- Unity使用NetworkView无法连接的一种解决方法
- Matlab的曲线拟合工具箱CFtool使用简介及一种非线性函数的曲线拟合方法(函数公式: k = A*(T^a)*exp(E/T) )
- 避免使用jQuery的html方法来替换标签,而是使用replaceWith方法
- Python 闭包的使用方法
- Delphi 中使用 ADO 方法打开 MySQL5.0 数据库并避免汉字乱码
- JS面向对象(3)之Object类,静态属性,闭包,私有属性, call和apply的使用,继承的三种实现方法
- 使用poi导出excel并打包的一种方法
- ECMAScript中使用最广泛,认同度最高的一种创建自定义类型的方法