всплывающие подсказки mootools для содержимого Request.HTML - PullRequest
1 голос
/ 28 октября 2011

У меня возникли проблемы с добавлением советов в запрос. HTML функция. У меня есть div, который обновляет его содержимое каждые 30 секунд. Возвращаемый контент содержит серию div с именем класса ".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 Ответ

2 голосов
/ 29 октября 2011

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

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

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

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

  1. Сделать tips общей переменной. Например, вы можете объявить его в функции, которая будет вторым аргументом вашего window.addEvent вызова, а затем сослаться на него как в initLiveContent, так и в onComplete обратном вызове.

  2. Намного больше Mooish :) Используйте Хранилище элементов для динамического извлечения экземпляра 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();
    }
    

:)

...