2012-04-13 14 views
10

Sono nuovo al sistema di templating Handlebars e questo è il mio primo progetto su cui sto lavorando con Handlebars. Ho creato semplice modello:Manubri - sottostringa

<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> 

restituito content è molto lungo. Voglio che sia più breve, ad es. 150 caratteri. Stavo cercando di utilizzare JavaScript metodo substring() come segue:

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

Ma, ovviamente, non ha funzionato. Potresti darmi alcuni consigli su come affrontare questo problema. Grazie

Edit: Va bene, problema risolto: ho fatto in PHP, in modo che tornato contenuto ha ora corretta lunghezza:

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

Per chiudere la domanda, presentare la soluzione e lo accetto come una risposta. – craniumonempty

risposta

19

si sta andando a voler creare un aiutante manubrio in javascript per eseguire il codice sottostringa:

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

Poi, nel modello, che si definirebbe così:

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

Si potrebbe anche fare del "150" un argomento per l'helper. –

-1

In alternativa, si potrebbe scrivere una funzione manubrio di supporto per eseguire la stringa

0

Ho risolto il mio problema in PHP. Ho modificato lo script PHP e ora il contenuto restituito ha una lunghezza adeguata.

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

il mio definiscono helper con taglio stringa indicare

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 l'aiutante del manubrio è sicuramente la strada da seguire qui;

Ecco il mio aiuto che consente di specificare e il punto finale + posiziona anche "..." se string.length> fine.

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); 
}); 

All'interno del modello:

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

Per coloro che lavorano con EmberJS, qui è la mia interpretazione di un aiutante 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); 
}); 

esempi di utilizzo:

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

o

{{substr description max=20}} 

Edit: un aiuto "legato" è ancora meglio.

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); 
}); 

questo funziona anche con proprietà nidificati:

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

restituisce nuovo Ember.Handlebars.SafeString (out); – Pierozi

+0

modificato, grazie – Alex

21

Sto usando valori come opzioni, a partire valore così come porre fine valore passato come argomenti modello di modulo. Prova questo:

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

in Template:

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

che sarà stampare primi 300 caratteri del valore. Spero che questo ti aiuti.

+1

Questa dovrebbe essere la risposta corretta, è più completa dell'altra. – azuax

+0

Grazie .. @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 solo un piccolo miglioramento, come la verifica della passedString, e il valore di default per inizioStringa e ENDSTRING. aggiungo '...' alla fine della stringa troncata :)

Basta chiamare il manubrio con {{troncare your_text_variable 0 50}}