在经典编辑器中,使用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\');
}
});
有人知道如何让古腾堡做到这一点吗?
SO网友:Alvaro
您面临的问题可能是div
当在DOM树中进行更改并且分配给它的处理程序不再工作时,将重新呈现(或父级)。这是因为在重新渲染后看到的元素实际上是一个新元素,没有指定处理程序。
一个快速(虽然效率不高)的修复方法是将处理程序分配给父元素,因为它不在react流中,所以不会再次呈现。然后使用delegated event 以控件为目标。
$("#wpbody").on("click", "input", function() {
console.log("input clicked");
});
也就是说,据我所知,在古腾堡内部处理元数据的最佳方法是使用
data package 并创建自己的组件。