更新已有插件的元素

问题描述 投票:0回答:1

Zurb Foundation 6.5.3

我有一个手风琴菜单,需要在初始页面加载后通过ajax更新。所以最初菜单包含2个项目,然后调用$(document).foundation();。在收到ajax响应之后,在菜单中添加(并可能删除/替换)元素。

我希望能够重复使用相同的元素,但我无法更新插件以重新设置更改的元素。我试过了:

  1. $("#my-menu").foundation();不起作用并显示错误: 试图在已经有一个Foundation插件的元素上初始化accordion-menu。
  2. Foundation.reflow(menu, 'accordion');不起作用。
  3. menu.foundation('reflow');不起作用并显示错误: 未捕获的ReferenceError:很抱歉,“reflow”不是AccordionMenu的可用方法。

我通过破坏和删除现有菜单,重新创建整个事情,然后调用$("#my-menu").foundation();使其工作,但在我看来这不是理想的。

zurb-foundation
1个回答
1
投票

我发现我的问题是由于在所有3种情况下没有一个解决方案工作:

  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"));
© www.soinside.com 2019 - 2024. All rights reserved.