一旦getBlock()实际返回POST的块而不是NULL,我如何触发jQuery事件?

时间:2021-07-28 作者:MadtownLems

在编辑器中,我试图在所有内容加载完毕并准备就绪后,循环浏览当前帖子的所有块。

wp.data.select("core/block-editor").getBlocks();
如果我手动调用它(通过链接/按钮),可以成功获取所有块,但我希望它自动运行。

当这个片段在domReady中时,一个la

wp.domReady( function() {...
getBlocks始终返回null。

我也试着用这个承诺

wp.domReady( function() {
窗口_wpLoadBlockEditor。然后(函数(){

console.log( "_wpLoadBlockEditor Promise resolved" );

var blocks = wp.data.select("core/block-editor").getBlocks();
console.log( blocks );
});

});

但即使对于块,它也返回null。这让我想知道,这个承诺是否只是为了让编辑自己做好准备;不是实际的帖子内容?

如果我添加了两秒钟的延迟(通过setTimeout),那么getBlocks将返回我的所有块。很明显,我不想武断地等待,希望一切都准备好了。有什么方法可以确保我的脚本在getBlocks()准备好实际返回帖子的块时立即启动?

1 个回复
SO网友:Phil

您需要;“订阅”;到更改(see this issue) 具有wp.data.subcribe.

更现代的版本会让您使用useSelect() 去拿积木。它将自动更新blocks 如果发生变化(即首先返回null, 然后是API请求完成后的块数组)。

import { useSelect } from \'@wordpress/data\';

const blocks = useSelect((select) => {
    return select(\'core/block-editor\').getBlocks();
});

if (blocks && blocks.length > 0) {
    blocks.forEach((block) => {
        // Do whatever you want with the block
    });
}

相关推荐

数据不能通过管理页面中的AJAX和jQuery插入和更新?

我制作了自定义插件并完成了crud操作,在管理页面中显示所有数据,使用了ajax和jquery。数据已成功删除,但未插入或更新。数据成功通过ajax,但未插入。还有,如果输入块为空,我会放置一些数据并更新它,我会看到什么。它得到了第一行数据错误-https://prnt.sc/wnzqjr用于插入数据的ajaxjQuery(\'.ins_btn\').click(function(){ var id = jQuery(this).attr(\'data-id\');