【问题标题】:Update an element that already has a plugin更新已有插件的元素
【发布时间】:2019-02-27 02:19:12
【问题描述】:

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


    【解决方案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"));
    

    【讨论】:

    • 不错的解决方案!我遇到了和你一样的问题,你的方法帮了我很多!谢谢。我尝试了许多解决方案来重新初始化手风琴菜单但没有成功;
    猜你喜欢
    • 2011-11-28
    • 1970-01-01
    • 2014-09-26
    • 2020-06-28
    • 2017-11-12
    • 1970-01-01
    • 1970-01-01
    • 2017-07-11
    • 2022-06-22
    相关资源
    最近更新 更多