Saltar al contenido

Magento 2: ¿Qué es un “ ¿Etiqueta?

Nuestros investigadores estrellas han agotado sus provisiones de café, por su búsqueda a tiempo completo por la respuesta, hasta que Jorge halló la respuesta en Gitea y en este momento la comparte contigo.

Solución:

Como insinuó Raphael, resulta que cuando Magento descarga sus plantillas KnockoutJS a través de una solicitud XHR (es decir, ajax), también las pasa a través de algunas rutinas de análisis personalizadas que buscan una serie de etiquetas personalizadas y attributes

Este análisis personalizado lo realiza el Magento_Ui/js/lib/knockout/template/renderer Módulo RequireJS. El código fuente de este módulo configura una serie de etiquetas predeterminadas y attributes buscar. también hay otro módulos que pueden agregar etiquetas adicionales y attributes a este renderizador. Por ejemplo, el siguiente

#File: vendor/magento/module-ui/view/base/web/js/lib/knockout/bindings/scope.js
renderer
    .addNode('scope')
    .addAttribute('scope', 
        name: 'ko-scope'
    );

agregará el etiquetar y scope attribute (

) a la lista de analizables attributes.

Es parece la idea básica es traducir estas etiquetas y attributes en bloques de plantilla “sin etiquetas” nativos de Knockout. Por ejemplo, la siguiente plantilla de Magento KnockoutJS


    

Se traduce al siguiente código KnockoutJS nativo


    

Las reglas exactas de esta traducción aún no están claras para mí: el código en Magento_Ui/js/lib/knockout/template/renderer es un poco indirecto, y parece que pueden cambiar de una etiqueta a otra, attribute a attribute.

He creado el siguiente fragmento de código que puede descargar una plantilla Magento KnockoutJS y traducirla a código KnockoutJS nativo.

jQuery.get('http://magento-2-1-0.dev/static/adminhtml/Magento/backend/en_US/Magento_Ui/templates/collection.html', function(result)
    var renderer = requirejs('Magento_Ui/js/lib/knockout/template/renderer')
    var fragment = document.createDocumentFragment();
    $(fragment).append(result);

    //fragment is passed by reference, modified
    renderer.normalize(fragment);
    var string = new XMLSerializer().serializeToString(fragment);
    console.log(string);    
)

En cuanto a por qué Magento podría hacer esto, supongo que quiere algún tipo de resaltado de sintaxis y legibilidad para la plantilla de comentarios de KnockoutJS, pero nunca descarte más razones al estilo de Mallory.

Ambas etiquetas se implementan bajo app/code/Magento/Ui/view/base/web/js/lib/knockout/template/renderer.js, aunque no estoy muy seguro de entender exactamente cómo se implementan:

_.extend(preset.nodes, 
    foreach: 
        name: 'each'
    ,

    /**
     * Custom 'render' node handler function.
     * Replaces node with knockout's 'ko template:' comment tag.
     *
     * @param HTMLElement node - Element to be processed.
     * @param String data - Data specified in 'args' attribute of a node.
     */
    render: function (node, data) 
        data = data 
);

Recuerda algo, que te brindamos la opción de agregar una reseña si te ayudó.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *