Soy nuevo en Magento2 y nuestra organización acaba de obtener la licencia EE. Lo instalé en mi máquina local y la plantilla predeterminada escupe lo siguiente mezclado con HMTL:
<script type="text/x-magento-init">
{
"*": {
"Magento_Ui/js/core/app": {
"components": {
"customer": {
"component": "Magento_Customer/js/view/customer"
}
}
}
}
}
</script>
Y llama como
<script type="text/x-magento-init">
{
"*": {
"Magento_Ui/js/core/app": {
"components": {
"messages": {
"component": "Magento_Theme/js/view/messages"
}
}
}
}
}
</script>
¿Esto tiene que ver con KnockoutJS
o RequireJS
? ¿Qué son estas llamadas y cuál es esta nueva etiqueta de script?<script type="text/x-magento-init">
magento-enterprise
magento2
frontend
knockoutjs
TheBlackBenzKid
fuente
fuente
Respuestas:
Uso general del "tipo de script"
Cuando usa
<script type="....">
el navegador, solo interpreta lo que sabe (como,text/javascript
por ejemplo).Cualquier otra cosa es ignorada.
Básicamente, al usar un tipo personalizado, está agregando información a la página sin mostrarla y sin que el navegador la interprete, y luego puede usar esa información como desee.
Cómo usa Magento esto
Magento usa estas secciones después de que se carga la página.
El código que los usa se encuentra en
lib/web/mage/apply/scripts.js
.No entiendo completamente lo que hace el archivo mencionado anteriormente, pero hay un comentario dentro del archivo que dice esto:
Conclusión / especulación
Especulo que esta es una forma de establecer diferentes comportamientos js para diferentes elementos en la página sin la necesidad de reescribir la plantilla que contiene los elementos.
Solo necesita agregar una
<script type="text/x-magento-init">
en una de sus plantillas, incluir su plantilla en la página y magento "auto-mágicamente" mueve el comportamiento al elemento correcto.fuente
app/design/frontend/package/template/Magento_Catalog/templates/product/view/gallery.phtml
pero no tuve suerte. ¿Algún consejo sobre la eliminación de comportamientos predeterminados, como la lupa de productos y / o la galería de productos (fotorama para ser precisos)?Adicionalmente,
vendor \ magento \ magento2-base \ lib \ web \ mage \ apply \ scripts.js
Mediante el uso de las siguientes guías
http://devdocs.magento.com/guides/v2.1/javascript-dev-guide/javascript/js_init.html
La sintaxis estándar es
Refiriéndose
http://alanstorm.com/magento_2_javascript_init_scripts
http://alanstorm.com/magento_2_introducing_ui_components
Magento a menudo usa el
x-magento-init
método para invocar un módulo RequireJS como programa. Sin embargo, el verdadero poder dex-magento-init
es la capacidad de crear un componente Javascript Magento.Los componentes Javascript de Magento son módulos RequireJS que devuelven una función.
Magento encuentra una
text/x-magento-init
etiqueta de script con un atributo *, lo hará1] Inicialice el módulo RequireJS especificado (Magento_Ui / js / core / app)
2] Llame a la función devuelta por ese módulo, pasando el objeto de datos
Espero eso ayude
fuente