2017-09-20 2 views
0

J'ai très peu d'expérience avec Magento2, mais je suis confronté à un problème qui nécessite potentiellement un aperçu de quelqu'un qui le fait.'Forcer' le bloc magento-init à exécuter?

J'ai seulement un accès frontal.

Je suis avec le bloc magento-init suivant:

<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> 

dans la body de ma page, que je compterais remplir un sectionLoadUrl sous Magento_Customer/js/customer-data.

Juste avant ma balise de fermeture </body>, j'inclure un fichier qui exécute la fonction suivante:

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'); 
        } 
       }); 
      } 
     }); 
    }); 
} 

Le but de cette fonction est d'ajouter une classe à ces produits sur la page qui appartiennent à la liste de l'utilisateur . Toutefois, cela génère une erreur de console, en spécifiant que sectionLoadUrl is undefined. Si j'appelle à la place la fonction depuis l'intérieur d'un setTimeout, elle s'exécute comme je l'aurais espéré, après le délai spécifié de 5s. Je veux éviter d'utiliser un setTimeout, donc je voudrais encourager des idées sur la façon dont je peux résoudre ce problème. Est-il possible de forcer l'exécution du bloc magento-init lorsqu'il est défini? Y a-t-il peut-être une autre dépendance que je pourrais ajouter à mon bloc require qui forcerait cela à attendre suffisamment longtemps? Y a-t-il plus que je dois considérer? J'ai essayé d'inclure le bloc magento-init dans le head de la page, mais je n'ai pas vu de meilleur résultat.

Répondre