Cada plantilla en mi proyecto es su propio archivo html. Utilizo una convención de nomenclatura (* .ko.html) para identificarlos. Mi cadena de acumulación es la siguiente:
Paso 1: La pelusa y el minify archivos * .ko.html Esto es sólo para eliminar los comentarios (excepto los <!-- ko -->
) y tira espacios en blanco extra para una carga útil más compacto.
Paso 2: Stringify y concat minified html en un archivo js. Los js se ve algo como
var templates={
'name1':'some stringified html',
'name2':'some more'
};
Yo considero concatenar en un archivo html con <script type="text/plain">
delimitadores pero elegí js porque de esta manera se puede cargar utilizando un simple <script>
etiqueta en lugar de una ajax obtienen + inyectar.
Paso 3: repare el motor de plantilla nativo para recuperar plantillas de mi objeto js.
var engine = new ko.nativeTemplateEngine();
engine._makeTemplateSource = engine.makeTemplateSource;
engine.makeTemplateSource = function (template, doc) {
if (typeof (template) === 'string' && templates[template]) {
return { text: function() { return templates[template]; } };
}
return engine._makeTemplateSource(template, doc);
};
ko.setTemplateEngine(engine);
Mi aplicación utiliza gruntjs para realizar estas etapas de la generación.(Ronco-contrib-htmlmin, ronco-contrib-concat)
opciones para htmlmin:
{
removeComments: true,
collapseWhitespace: true,
ignoreCustomComments: [/^\s*ko /, /^\s*\/ko /]
}
opciones para concat
{
stripBanners: true,
banner: "(function(t){",
footer: "})(window.templates || (window.templates={}));",
process: function (src, file) {
return 't[\'' + file.replace(/^.*\//, '').replace('.ko.html', '') + '\']=' + JSON.stringify(src) + ';';
}
}
Para cualquiera que se pregunte por qué alguien querría hacer esto: Los archivos fuente de plantillas son archivos html individuales estándar que se pueden editar en cualquier editor html y fuente controlada como tal. Editar HTML html dentro de las etiquetas <script>
no es divertido. Como beneficio adicional, los archivos fuente pueden incluir comentarios que serán eliminados. Las plantillas se pueden volver a usar en cualquier página al incluir la etiqueta de script: no es necesario insertarlas en todas las páginas. El paquete resultante es un archivo estático que los navegadores pueden almacenar fácilmente en caché, mientras que las plantillas incrustadas en una página generada dinámicamente no pueden hacerlo. Más o menos las mismas razones para agrupar archivos javascript.
hey tiene un repositorio en línea con una muestra, p. en github? – hehe