Gutenberg通过POST格式过滤Metaboxes

时间:2019-01-09 作者:charlenemasters

在经典编辑器中,使用jQuery可以很容易地根据post格式显示和隐藏元数据库:

if( ! $("input#post-format-gallery").is(\':checked\') ){
        $( "#gallery-metabox" ).hide();
}
$( "input[name=post_format]#post-format-gallery" ).change( function() {
        $( "#gallery-metabox" ).fadeIn();
} );
$( "input[name=post_format]:not(#post-format-gallery)" ).change( function() {
        $( "#gallery-metabox" ).fadeOut();
} );
我试图把这个解决方案带到古腾堡,以保持我的代谢箱工作。在对实际块编辑器进行编辑之前,以下解决方案一直有效。一旦添加了文本或新块,过滤器就会停止触发。唯一能让它起作用的就是点击帖子页面上的“编辑”,然后重新打开古腾堡编辑器。

$(".editor-post-format select.components-select-control__input").on(\'change\', function() {
    var $current = $(this).val();

    if( $current == "gallery" ) {
        $( "#gallery-metabox" ).css(\'display\', \'block\');
    } else {
        $( "#gallery-metabox" ).css(\'display\', \'none\');
    }
});
有人知道如何让古腾堡做到这一点吗?

1 个回复
SO网友:Alvaro

您面临的问题可能是div 当在DOM树中进行更改并且分配给它的处理程序不再工作时,将重新呈现(或父级)。这是因为在重新渲染后看到的元素实际上是一个新元素,没有指定处理程序。

一个快速(虽然效率不高)的修复方法是将处理程序分配给父元素,因为它不在react流中,所以不会再次呈现。然后使用delegated event 以控件为目标。

$("#wpbody").on("click", "input", function() {
    console.log("input clicked");
});
也就是说,据我所知,在古腾堡内部处理元数据的最佳方法是使用data package 并创建自己的组件。

相关推荐

如何使用两个不同文件向jQuery AJAX调用发送php变量

我需要从一个php文件(page.php)向另一个jquery文件(sender.js)中的Ajax调用发送一个私人电子邮件地址。此电子邮件地址必须对用户/或网站不可见,直到用户从wp\\U mail获得自动响应,它必须允许用户答复组织。此电子邮件地址因客户想要联系的组织而异(数百个)。我必须在表单之前从组织获取电子邮件地址,因为它是由javascript生成的。(generated\\u mail.js)发件人。js在页面的标题中被很好地调用。php我在(page.php)中尝试了这段代码——一个组织在