Realmente tengo problemas con las colisiones de nombres en mis plantillas de Moustache (usando Mustache.js). Este ejemplo ilustra esos dos problemas:¿Hay alguna forma de evitar las colisiones de nombres en estructuras anidadas en mis plantillas de Moustache.js?
estoy pasando estos datos:
{'recs': {'code': 'foo', 'id': 1
'childRecs': [{'id': 2},
{'code': 'bar', 'id': 3}]
}
}
en esta plantilla:
{{#recs}}
Record ID: {{id}}
{{#childRecs}}
This child code is: [{{code}}] and its parent ID is: {{id}}
{{/childRecs}}
{{/recs}}
esperado:
Record ID: 1
This child code is: [] and its parent ID is 1
This child code is: [bar] and its parent ID is 1
real:
Record ID: 1
This child code is [foo] and its parent ID is 2
This child code is [bar] and its parent ID is 3
No hay manera en el
{{#childRecs}}
bloque anidado para acceder al campo padre{{#recs}}{id}}{{/recs}}
- se sobrescribe con el{{#childRecs}}{{id}}{{/childRecs}}
Si una variable en
{{#childRecs}}
no está presente, y una variable de matriz de la misma nombre existe, no hay forma de evitar que imprima la variable principal.
Mis estructuras anidadas son muy profundas y hay muchos conflictos de nombres, por lo que renombrar ellos de tal manera que no choquen no es una opción viable. ¿Hay alguna otra forma de resolver mis problemas?
terminé escribiendo una envoltura alrededor de Mustache.to_html que renombra recursivamente cada propiedad del objeto de datos anteponiendo un número de períodos iguales a la profundidad. Luego modifiqué mi plantilla para que coincida. De esta manera, debo especificar explícitamente la profundidad cada vez que uso una variable en la plantilla, y las variables son todas únicas. Handlebars.js parece tentador: no estoy seguro si ../ es la * única * forma de acceder a las propiedades principales, o si retrocede por defecto si no existe tal propiedad en el elemento secundario. No me gusta el repliegue. Lamentablemente, no parece haber un analizador PHP maduro para las plantillas de manubrio. –
Originalmente, iba a agregar una propiedad parentId a cada objeto para hacer referencia a su elemento principal, pero el problema que encontré fue cuando la anidación tenía varios niveles de profundidad: no había forma de recorrer el árbol hasta llegar a un abuelo. Mustache.js no permite etiquetas anidadas con el mismo nombre, p. {{#parentId}} {{# parentId}} {{val}} {{/ parentId}} {{/ parentId}}, pero para un único nivel que funcionaría. –
Me encontré con el mismo problema y acabo de agregar valores a mi vista. {{catID}} ahora es un campo dentro de mi vista {{sub-cat}}. Funciona ... aunque es otra llamada DB que prefiero no hacer. –