'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
,正如所希望的那样。
我对 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
,正如所希望的那样。