Рукоятки - подстрока
Я новичок в Handlebars templating system, и это мой первый проект, над которым я работаю с Handlebars. Я создал простой шаблон:
<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>
Возврат content
очень длинный. Я хочу, чтобы он был короче, например. 150 символов. Я пытался использовать метод JavaScript substring()
следующим образом:
<p> {{{content.substring(0,150)}}} </p>
Но это явно не сработало. Не могли бы вы дать мне несколько советов, как справиться с этой проблемой. Благодаря
Изменить:
Хорошо, проблема решена:
Я сделал это на PHP, так что возвращаемое содержимое имеет надлежащую длину:
foreach ($articles as $a) {
$a->content = cut_text( $a->content, 30);
}
Ответы
Ответ 1
Вам нужно создать хелпер Handlebars в javascript для выполнения кода подстроки:
Handlebars.registerHelper('trimString', function(passedString) {
var theString = passedString.substring(0,150);
return new Handlebars.SafeString(theString)
});
Затем в вашем шаблоне вы бы назвали это следующим образом:
<p> {{{trimString content}}} </p>
Ответ 2
Я использую значения как параметры, начальное значение, так и конечное значение, переданное как шаблон формы аргументов. Попробуйте следующее:
Handlebars.registerHelper('trimString', function(passedString, startstring, endstring) {
var theString = passedString.substring( startstring, endstring );
return new Handlebars.SafeString(theString)
});
В шаблоне:
<p>{{{trimString value 0 300}}}</p>
он выведет первые 300 символов значения. Надеюсь, это поможет вам.
Ответ 3
Для тех, кто работает с EmberJS, вот моя интерпретация помощника 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);
});
Примеры использования:
{{substr description start=5 max=20}}
или
{{substr description max=20}}
Изменить: "связанный" помощник еще лучше.
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);
});
это также работает с вложенными свойствами:
{{substr view.product.description max=50}}
Ответ 4
my define helper with string cut указывает
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);
});
Ответ 5
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+'...');
}
});
Ответ 6
Yeh помощник руля определенно имеет место здесь;
Здесь мой помощник, который позволяет указать и конечную точку +, также помещает "...", если string.length > end.
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);
});
Внутри шаблона:
<p>{{{substring myString 0 100}}}</p>
Ответ 7
Я пользуюсь этим помощником
Handlebars.registerHelper('truncate', (value, options) => {
const opts = options.hash;
const max = opts.max || '250';
const out = value.substring(0, max);
return new Handlebars.SafeString(value.length > max ? '${out}...' : out);
});
Ответ 8
В качестве альтернативы вы можете написать вспомогательную функцию handlebars для выполнения подстроки
Ответ 9
Я решил свою проблему в PHP. Я изменил PHP script, и теперь возвращаемое содержимое имеет соответствующую длину.
foreach ($articles as $a) {
$a->content = cut_text( $a->content, 30);
}