'Force' 要执行的 magento-init 块?

'Force' magento-init block to execute?

我对 Magento2 的经验很少,但我发现了一个问题,可能需要这样做的人提供一些见解。

我只有前端访问权限。

我包括以下 magento-init 块:

<script type="text/x-magento-init">
    {
        "*":
        {
            "Magento_Customer\/js\/customer-data":
            {
                "sectionLoadUrl": "http:\/\/www.example.com\/customer\/section\/load\/",
                "cookieLifeTime": "3600",
                "updateSessionUrl": "http:\/\/www.example.com\/customer\/account\/updateSession\/"
            }
        }
    }
</script>

在我页面的 body 中,我希望在 Magento_Customer/js/customer-data 下填充一个 sectionLoadUrl

就在结束 </body> 标记之前,我包含了一个执行以下功能的文件:

function highlightWishlistHearts() {
    require(['Magento_Customer/js/customer-data'], function(customerData) {
        customerData.reload(['wishlist'], false).complete(function(response) {
            var customerWishlist = jQuery.parseJSON(response.responseText).wishlist.items;
            for (var i = 0, wishlistLength = customerWishlist.length; i < wishlistLength; i++) {
                var productURL = customerWishlist[i].product_url;
                jQuery('.product-item-actions').each(function() {
                    if (productURL === jQuery(this).data('product-url')) {
                        jQuery(this).children('.towishlist.remove').addClass('inwishlist');
                    }
                });
            }
        });
    });
}

此功能的目的是为页面上属于用户心愿单的产品添加class。

但是,这会引发控制台错误,指定 sectionLoadUrl is undefined。如果我改为从 setTimeout 内部调用该函数,它会在指定的 5 秒超时后按我的预期执行。

我想避免使用 setTimeout,因此鼓励大家提出有关如何解决此问题的任何想法。有没有办法强制 magento-init 块在定义时执行?我是否可以将另一个依赖项添加到我的 require 块中,以强制它等待足够长的时间?我还需要考虑更多吗?我尝试在页面的 head 中包含 magento-init 块,但没有看到更好的结果。

我最终发现 reload() 函数正在向 http://www.example.com/customer/section/load/?sections=wishlist&update_section_id=false 发出请求,所以我改为对该页面执行 AJAX 请求,并从 JSON 在那里。摆脱了 setTimeout,正如所希望的那样。