javascript
  • templates
  • handlebars.js
  • 2012-04-13 31 views 10 likes 
    10

    我是Handlebars模板系统的新手,这是我使用Handlebars工作的第一个项目。我创建了简单的模板:Handlebars - substring

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

    要关闭的问题,提出解决方案,并接受它作为一个答案。 – craniumonempty 2012-04-13 12:03:16

    回答

    19

    你会想在JavaScript来创建一个手把帮手来执行代码子:

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

    然后,在你的模板,你会这样称呼它:

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

    你也可以将“150”作为帮手的参数。 – 2012-07-26 22:18:52

    -1

    或者,你可以写一个车把辅助函数来执行字符串

    0

    我已经在PHP中解决了我的问题。我修改了PHP脚本,现在返回的内容具有适当的长度。

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

    我定义助手用绳子切断指示

    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

    叶车手帮手肯定是前进的方向;

    这里是我的帮手,它允许你指定和结束点+也放置“...”如果string.length>结束。

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

    对于那些谁与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}} 
    
    +0

    返回新的Ember.Handlebars.SafeString(out); – Pierozi 2015-07-26 17:12:27

    +0

    编辑,谢谢 – Alex 2015-07-30 07:32:13

    21

    我使用的值作为选项,初始值以及结束传递的值作为参数表单模板。试试这个:

    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个字符。希望这对你有所帮助。

    +1

    这应该是正确的答案,它比另一个更完整。 – azuax 2015-04-29 20:58:40

    +0

    谢谢.. @azuax – Naitik 2015-04-30 08:39:13

    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+'...'); 
     
        } 
     
    });

    只需一点点改善作为passedString的验证和默认值startString和Endstring。 我添加“...”在截断字符串:)

    就叫车把与结束{{截断your_text_variable 0 50}}

    相关问题