Обновите элемент, который уже имеет плагин - PullRequest
0 голосов
/ 27 февраля 2019

Zurb Foundation 6.5.3

У меня есть меню аккордеона, которое необходимо обновить через ajax после начальной загрузки страницы.Итак, изначально меню содержит 2 пункта, затем вызывается $(document).foundation();.Позже, после получения ответа ajax, элементы добавляются (и потенциально удаляются / заменяются) в меню.

Я хотел бы иметь возможность повторно использовать те же элементы, однако я не могу обновить плагин доизмените стиль измененных элементов.Я попытался:

  1. $("#my-menu").foundation();, который не работает и показывает ошибку:

    Попытка инициализировать аккордеонное меню на элементе, который ужеимеет плагин Foundation.

  2. Foundation.reflow(menu, 'accordion');, который не работает.

  3. menu.foundation('reflow');, который не работает ипоказывает ошибку:

    Uncaught ReferenceError: К сожалению, 'reflow' не доступен для AccordionMenu.


Я заставил его работать, уничтожив и удалив существующее меню, воссоздав все это, затем вызвав $("#my-menu").foundation();, однако, на мой взгляд, это не идеально.

1 Ответ

0 голосов
/ 27 февраля 2019

Я обнаружил, что моя проблема была в том, что ни одно решение не работало во всех трех случаях:

  1. Основание еще не было инициализировано
  2. Основание инициализировано, и весь элемент былзаменен, поскольку
  3. инициализирован фундамент, а элемент обновлен с

Если у кого-то нет лучшего ответа, я решил использовать этот подход:

// this can happen before, or after code creates the menu
$(document).foundation();
console.log("foundation run");
__foundationRun = true;


...


function foundationUpdate(el) {
    if (__foundationRun) {
        if (el.data('zfPlugin'))
            // already initialised, update it
            Foundation.reInit(el);
        else
            // new element, initialise it
            el.foundation();
    }
    // else leave for foundation initialise
}

....

// ... do updates (modify or replace entirely) and then:
foundationUpdate($("#my-menu"));
...