javascript
  • templates
  • handlebars.js
  • 2012-04-13 69 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}}

    相關問題