如何为所有调用创建一个Prototype Ajax.Updater onComplete挂钩

时间:2010-07-23 08:49:47

标签: javascript ajax javascript-events prototypejs

如果Ajax.Updater更新了dom元素,是否有机会在原型框架内观察?

我想在所有Ajax.Updater调用中观察该事件,而不是在onComplete参数中编写函数。关于如何做到这一点的任何想法?

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

Ajax.Responders允许您观看'ajax事件'(不是javascript意义上的事件)。 API表示传递给回调的第一个参数是请求者对象,因此您可以具体检查它是否为Ajax.Updater,然后检查它是.container.success以查找要更新的元素ID。您可以假设,因为它是onComplete事件,所以引用的元素将被更改。

答案 1 :(得分:0)

我认为你不能没有onComplete处理程序,除非你想重写原型ajax API。但是,您不必直接将闭包传递给onComplete处理程序。

您可以在javascript代码中的顶级范围内创建一个空对象:

 var updates = { } ;

现在你要设置onComplete参数来包含一个紧凑的函数,它通过你更新的div的名称(+多个更新的日期)将属性设置为updates对象:

 function update() {

     var divName = arguments[0] ;
     var date = new Date() ;

         if( updates[divName] ) { //!! if there is an entry for that div fill date
                 updates[divName].push(date) ;
         } else { //!! else create a new array with the current date
                 updates[divName] = [ date ] ;
         }

 }

现在,您可以通过div的名称检查属性对象来检查更新:

 /* code */
     if( updates[divName] !== null ) {
         isAlreadyUpdated() ;
     } else {
         isNotAlreadyUpdated() ;
     }
 /* more code */

顺便说一下,我不排除原型API中可能会有类似方法的方法。我对原型并不熟悉。

如果没有,我希望这会有所帮助!

FK