我对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
块,但没有看到更好的结果。
答案 0 :(得分:0)
我最终发现reload()
函数正在向http://www.example.com/customer/section/load/?sections=wishlist&update_section_id=false发出请求,所以我改为对此页面执行了一个AJAX请求,并从那里读取了JSON。根据需要摆脱setTimeout
。