2011-03-25 9 views
9

Este es un ejemplo simple basado en el código en los documentos API de jquery-tmpl. Me gustaría usar una etiqueta {{tmpl}} anidada, aquí la "titleTemplate". Me gustaría usar varias funciones auxiliares tanto en la plantilla externa como en la plantilla anidada. Este ejemplo tiene una función auxiliar trivial llamada "embolden" que se pasa a la llamada inicial tmpl().¿Cómo llamo a funciones en etiquetas {{tmpl}} anidadas en jquery-templates?

El siguiente funciona. Puedo envalentonar los datos de Name dentro de titleTemplate. Pero parece desordenado. ¿Hay una manera más limpia de hacer esto? Dado que formatHelpers pasa a la llamada tmpl() original, ¿es realmente necesario pasarlo también a la etiqueta {{tmpl}}?

<script id="movieTemplate" type="text/x-jquery-tmpl"> 
    {{tmpl($item.data, formatHelpers) "#titleTemplate"}} 
    <tr class="detail"><td>Director: ${$item.embolden(Director)}</td></tr> 
</script> 

<script id="titleTemplate" type="text/x-jquery-tmpl"> 
    <tr class="title"><td>${$item.embolden($item.data.Name)}</td></tr> 
</script> 

<table><tbody id="movieList"></tbody></table> 

<script> 
var formatHelpers = { 
    embolden: function(i) { 
     return "*" + i + "*"; 
    } 
}; 

var movies = [ 
    { Name: "The Red Violin", Director: "François Girard" }, 
    { Name: "Eyes Wide Shut", Director: "Stanley Kubrick" }, 
    { Name: "The Inheritance", Director: "Mauro Bolognini" } 
]; 

/* Render the template with the movies data */ 
$("#movieTemplate").tmpl(movies, formatHelpers).appendTo("#movieList"); 
</script> 

Respuesta

12

Con su ejemplo, todo lo que tiene que hacer es

{{tmpl($item.data, $item) "#titleTemplate"}} 

ejemplo Código de jsfiddle.

Otra forma de hacerlo es definir tu FormatHelpers en el alcance global, deberías poder llamarlos directamente en tu plantilla.

var formatHelpers = { 
    embolden: function(i) { 
     return "*" + i + "*"; 
    } 
}; 
$(function() { 
    var movies = [ 
     { 
     Name: "The Red Violin", 
     Director: "François Girard"}, 
    { 
     Name: "Eyes Wide Shut", 
     Director: "Stanley Kubrick"}, 
    { 
     Name: "The Inheritance", 
     Director: "Mauro Bolognini"} 
    ]; 

    $("#movieTemplate").tmpl(movies).appendTo("#movieList"); 
}); 

Y dentro de su plantilla que puede hacer lo siguiente:

<script id="movieTemplate" type="text/x-jquery-tmpl"> 
    {{tmpl($item.data) "#titleTemplate"}} 
    <tr class="detail"><td>Director: ${formatHelpers.embolden(Director)}</td></tr> 
</script> 

<script id="titleTemplate" type="text/x-jquery-tmpl"> 
    <tr class="title"><td>${formatHelpers.embolden(Name)}</td></tr> 
</script> 

ejemplo Código de jsfiddle.

+0

Gracias! La primera solución es lo que estaba buscando, ya que me permite escribir funciones en formatoHelpers donde 'esto' se refiere al tmplItem actual. – heyotwell

Cuestiones relacionadas