'强制'magento-init块执行?

时间:2017-09-20 02:55:20

标签: javascript requirejs magento2

我对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中,我希望在sectionLoadUrl下填充Magento_Customer/js/customer-data

在我的结束</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');
                    }
                });
            }
        });
    });
}

此功能的目的是在页面上为属于用户心愿单的那些产品添加一个类。

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

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

1 个答案:

答案 0 :(得分:0)

我最终发现reload()函数正在向http://www.example.com/customer/section/load/?sections=wishlist&update_section_id=false发出请求,所以我改为对此页面执行了一个AJAX请求,并从那里读取了JSON。根据需要摆脱setTimeout