всплывающие подсказки mootools не отображаются для запроса.Содержимое HTML

#javascript #css #mootools #mootools-events #mootools-more

#javascript #css #mootools #mootools-события #mootools-больше

Вопрос:

У меня возникли некоторые проблемы с добавлением подсказок к запросу.Функция HTML. У меня есть div, который обновляет свое содержимое каждые 30 секунд. Возвращаемое содержимое содержит серию разделов с именем класса «.liveReader».

Вот JS, который я должен инициировать содержимое

             window.addEvent('domready', initLiveContent);

            function initLiveContent()
            {
                    var tips = new Tips('.liveReader');
                    (function() { refreshPanel() }).periodical(30000);
                    refreshPanel();
            }

            function refreshPanel()
            {
                    var myRequest = new Request.HTML({
                             url: '/inc/liveFeed.aspx',
                             update: $('liveContent'),
                             method: 'get',
                             onComplete: function() {
                                 tips.attach('.liveReader');
                             }
                    });
                    myRequest.send();
            }
 

Итак, HTML — это

 <div id="liveContent">
    <div id="item1" class="liveReader" title="item 1"><p>Text 1</p></div>
    <div id="item2" class="liveReader" title="item 2"><p>Text 2</p></div>
</div>
 

Но все, что я вижу, это обычный заголовок всплывающей подсказки! есть идеи ?!!

Ответ №1:

Ваша проблема связана с областью видимости переменной.

Ваш onComplete обработчик использует ссылку на tips , в то время как эта переменная является локальной для initLiveContent функции. Следовательно, onComplete вызов завершается с ошибкой.

Итак, первый совет (без каламбура): всегда начинайте с реального отладчика и устанавливайте для него прерывание при всех исключениях. В противном случае, поскольку ошибка («неопределенная переменная tips «) выдается из обратного вызова, она не будет отображаться в стандартной консоли.

Затем два способа исправить ваш код:

  1. Создайте tips общую переменную. Вы могли бы, например, объявить его в функции, которая будет вторым аргументом вашего window.addEvent вызова, а затем ссылаться на него в обоих initLiveContent и onComplete в обратном вызове.
  2. Гораздо более капризный 🙂 Используйте хранилище элементов для динамического извлечения вашего Tips экземпляра из обновленного контейнера. Это:
     function initLiveContent()
    {
        var tips = new Tips('.liveReader');
            // … your previous code …
        $('liveContent').store('tip', tips);    
    }
    
    function refreshPanel()
    {
        var destination = $('liveContent');
        var myRequest = new Request.HTML({
            update: destination,
                // … your previous code …
            onComplete: function() {
                destination.retrieve('tip').attach('.liveReader');
            }
        });
        myRequest.send();
    }
     

🙂