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 (
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ó.