Как создать Prototype Ajax.Updater onComplete hook для всех вызовов - PullRequest
0 голосов
/ 23 июля 2010

Есть ли возможность наблюдать в рамках прототипа, если элемент dom был обновлен Ajax.Updater?

Вместо написания функции в параметре onComplete, я хотел бы наблюдать это событие для всехAjax.Updater звонки.Есть идеи, как это сделать?

Спасибо за вашу помощь

Ответы [ 2 ]

1 голос
/ 07 февраля 2011

Существует Ajax.Responders, который позволяет вам наблюдать «события ajax» (не совсем события в смысле javascript). API говорит, что первый параметр, переданный вашему обратному вызову, является объектом-запросчиком, поэтому вы можете проверить, является ли он Ajax.Updater, а затем проверить, является ли он .container.success, чтобы найти обновляемый идентификатор элемента. Вы, вероятно, можете предположить, что поскольку это событие onComplete, то указанный элемент будет изменен.

0 голосов
/ 23 июля 2010

Я не думаю, что вы можете обойтись без обработчика onComplete, если только вы не захотите переписать прототип ajax API.Однако вам не нужно напрямую передавать закрытие в обработчик onComplete.

Что вы можете сделать, это создать пустой объект в области верхнего уровня в вашем коде JavaScript:

 var updates = { } ;

Теперь вы должны установить параметр onComplete, чтобы он содержал компактную функцию, которая устанавливает свойство для объекта updates по имени обновленного элемента div (+ дата для нескольких обновлений):

 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

...