定制器中耗时的回调

时间:2020-11-21 作者:Rohit Patil

我有一个自定义状态,例如“可见性状态”,其值为true | false。

我正在将此状态绑定到所有设置,设置为1000多个数字。因此,当状态改变时,它会将所有状态回忆1000多次,这似乎是一个沉重的过程。

    var setActiveState = function () {
    // This is calling 1000+ times.
                            element.active.set( logic_to_toggle() );
    };

    // This is in the loop of all the controls.
    api.state(\'visibility-state\').bind( setActiveState );

是否有任何优化的方法来删除所有绑定函数并仅为展开部分设置,以便展开部分下的控件仅切换?

您可以在此处观察延迟:https://a.cl.ly/yAuZ8o0p

1 个回复
SO网友:Antti Koskinen

建立在How to hook on customizer section expanded/active/opened event? 问题,也许您可以听一下这样展开的节(或面板),以从previuos节中解除函数绑定,并将它们绑定到当前节。

(function ( api ) {

    // Wait for Customizer to be ready
    api.bind( \'ready\', function() {

        // "cache"
        var currentPanel,
            currentSection;

        // Listen for panel expands
        api.panel.each( function ( thisPanel ) {
            thisPanel.expanded.bind( function( isExpanding ) {
                if (isExpanding) {
                    unbindCustomFunctions( currentPanel )
                    bindCustomFunctions( thisPanel );
                    currentPanel = thisPanel;
                }
            });
        });

        // Listen for section expands
        api.section.each( function ( thisSection ) {
            thisSection.expanded.bind( function( isExpanding ) {
                if (isExpanding) {
                    unbindCustomFunctions( currentSection )
                    bindCustomFunctions( thisSection );
                    currentSection = thisSection;
                }
            });
        });
    });

    function bindCustomFunctions( sectionOrPanel ) {
        // Code
    }

    function unbindCustomFunctions( sectionOrPanel ) {
        // Code
    }

} ( wp.customize ) );

相关推荐

JQuery AJAX未加载带有ACF字段的页面

我使用以下jQuery代码将内容从一个模板部分加载到另一个模板部分。如果没有ACF PHP标记,它就可以工作。但是,当我在中添加这些标记时<?php the_field(\'field_name\'); ?> 它抛出500(内部服务器错误)错误。请问有没有人能解决这个问题? var baseUrl = "http://projectname:8888/wp-content/themes/custom-theme" $(".cross