2012-04-13 7 views
10

Soy nuevo en el sistema de plantillas Handlebars y este es mi primer proyecto en el que estoy trabajando con manubrios. He creado plantilla simple:Manillar - subcadena

<script id="article_list_template" type="text/x-handlebars-template"> 
    {{#each this}} 
    <div class='article'> 
    <a href='article.php?id={{id_news}}' data-article_id='{{id_news}}'> 
     <h1>{{title}}</h1> 
    </a> 
     <p> {{{content}}} </p> 
    <div style='clear: both;'> </div> 
    </div> 
    {{/each}} 
</script> 

devuelto content es muy largo. Quiero que sea más corto, p. 150 caracteres. Yo estaba tratando de utilizar JavaScript substring() método de la siguiente manera:

<p> {{{content.substring(0,150)}}} </p>

Pero, obviamente, no funcionó. ¿Podría darme algunos consejos sobre cómo lidiar con ese problema? Gracias

Editar: bien, problema resuelto: lo he hecho en PHP, por lo que regresó contenido tiene la longitud ahora apropiada:

foreach ($articles as $a) { 
    $a->content = cut_text($a->content, 30); 
} 
+0

Para cerrar la pregunta, envíe su solución y lo aceptan como una respuesta. – craniumonempty

Respuesta

19

vas a querer crear un ayudante manillares en javascript para ejecutar el código subcadena:

Handlebars.registerHelper('trimString', function(passedString) { 
    var theString = passedString.substring(0,150); 
    return new Handlebars.SafeString(theString) 
}); 

Luego, en su plantilla, que se dice así:

<p> {{{trimString content}}} </p> 
+3

También podría hacer que el "150" sea un argumento para el ayudante. –

-1

Alternativamente, se podría escribir una función manillar de ayuda para llevar a cabo la subcadena

0

He resuelto mi problema en PHP. He modificado el script PHP y ahora el contenido devuelto tiene la longitud adecuada.

foreach ($articles as $a) { 
    $a->content = cut_text($a->content, 30); 
} 
1

Mi ayudante definen con el corte de cadena indicar

Handlebars.registerHelper('trimS', function(passedString, start, length){ 
var mlength = length,preS='',tailS=''; 
if(start>0 && passedString.length>3){ 
    var preS= '...'; 
    mlength = length -3; 
} ; 
if(passedString.length>(start + length)){ 
    tailS = '...'; 
    mlength = mlength -3; 
}; 
var theString = preS + passedString.substr(start, mlength) + tailS; 
return new Handlebars.SafeString(theString); 
}); 
0

Yeh, el asistente de manubrio es definitivamente el camino a seguir aquí;

Aquí es mi ayudante que le permite especificar y el punto final + también lugares "..." si string.length> final.

Handlebars.registerHelper('substring', function(string, start, end) { 

    var theString = string.substring(start ,end); 

    // attach dot dot dot if string greater than suggested end point 
    if(string.length > end) { 
     theString += '...'; 
    } 

    return new Handlebars.SafeString(theString); 
}); 

Dentro de la plantilla:

<p>{{{substring myString 0 100}}}</p> 
4

Para aquellos que trabajan con EmberJS, aquí es mi interpretación de un ayudante substr:

Ember.Handlebars.registerHelper('substr', function(property, options) { 

    var str = Ember.get(this, property); 
    var opts = options.hash; 

    var start = opts.start || 0; 
    var len = opts.max; 

    var out = str.substr(start, len); 

    if (str.length > len) 
     out += '...'; 

    return new Ember.Handlebars.SafeString(out); 
}); 

Ejemplos de uso:

{{substr description start=5 max=20}} 

o

{{substr description max=20}} 

Editar: un ayudante "obligado" es aún mejor.

Ember.Handlebars.registerBoundHelper('substr', function(value, options) { 

    var opts = options.hash; 

    var start = opts.start || 0; 
    var len = opts.max; 

    var out = value.substr(start, len); 

    if (value.length > len) 
     out += '...'; 

    return new Ember.Handlebars.SafeString(out); 
}); 

esto funciona también con propiedades anidadas:

{{substr view.product.description max=50}} 
+0

return new Ember.Handlebars.SafeString (out); – Pierozi

+0

editado, gracias – Alex

21

estoy usando los valores como opciones, a partir de valor, así como el valor final pasa como argumentos forman la plantilla. Prueba esto:

Handlebars.registerHelper('trimString', function(passedString, startstring, endstring) { 
    var theString = passedString.substring(startstring, endstring); 
    return new Handlebars.SafeString(theString) 
}); 

En plantilla:

<p>{{{trimString value 0 300}}}</p> 

que va a imprimir 300 primeros caracteres del valor. Espero que esto te ayude

+1

Esta debería ser la respuesta correcta, es más completa que la otra. – azuax

+0

Gracias .. @azuax – Naitik

1

Handlebars.registerHelper('truncate', function(passedString, startstring, endstring) { 
 
    if(passedString){ 
 
     if(!startstring) startstring=0; 
 
     if(!endstring) endstring=30; 
 
     var theString = passedString.substring(startstring, endstring); 
 
     return new Handlebars.SafeString(theString+'...'); 
 
    } 
 
});

Con un poco de alivio como la verificación de passedString, y el valor por defecto para startString y endstring. agrego '...' al final de la cadena truncada :)

Sólo tiene que llamar manillar con {{truncar your_text_variable 0 50}}