首页 > 解决方案 > 更新已有插件的元素

问题描述

Zurb 基金会 6.5.3

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

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

  1. $("#my-menu").foundation();这不起作用并显示错误:

    试图在已经有 Foundation 插件的元素上初始化手风琴菜单。

  2. Foundation.reflow(menu, 'accordion');这是行不通的。

  3. menu.foundation('reflow');这不起作用并显示错误:

    未捕获的 ReferenceError:很抱歉,“reflow”不是 AccordionMenu 的可用方法。


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

标签: zurb-foundation

解决方案


我发现我的问题是由于没有一种解决方案适用于所有 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"));

推荐阅读