最近改进了一下以前写的多幅图片轮流切换展示的代码,以前只是以类的方式整合到了dojo,并且在使用时必须显式调用window.setInterval方法。
这样有下面两个缺点:1 需要指定各个存放显示数据容器的名称或者传递引用进去。
2 必须显式调用window.setInterval方法才能开始循环。
很麻烦。
现在将它做成了widget,只需要传递进需要展示的数据以及循环间隔描述就可以了。
制作widget的方法就不说了,但在其中遇见了一个问题,那就是:
在一个widget(可以看做是一个javascript对象)中,如何定时循环执行当前对象的方法呢?
直接用window.setInterval("this.doXXX()",5)是无法执行的。虽然在这里我觉得this代表的应该是当前的widget,但好像javascript不是这样认为的。
按照他的理解,估计是将this当作了window对象了??
于是只能采取另一种思路:如果在最外层,也就是直接在页面上获取到当前的widget对象不就成了么?
那么,如何取到当前widget对象很简单的,通过dijit.byId(),就可以了。
所以,我这样写:
postCreate: function(){
……………………
setInterval("dijit.byId('"+this.id+"').rollerAd.showNext()",this.rollerAd.chandeSecond*1000);
………………
}
果然没有问题了。
小结:目前认为使用window.setInterval();中的方法必须是能够从window对象这一级别向下一级级取到的。所以想在一个对象内部定义一个setInterval,必须拥有这个对象在window对象级别(可以级级向下关联获取到)的引用