2017-03-10 7 views
0

はのは、各オブジェクトタイプは、HTMLテンプレート自体でをレンダリングする方法を定義する方法はあります私はオブジェクトHandlebarsテンプレートを使用するときに値をHTMLでフォーマットする方法を指定する方法はありますか?

var context = { 
    subject: "Hello", 
    from: "Joe", 
    date:"2017-03-09T16:34:20Z", 
    message: "Test message", 
    msg_size: 1243, 
    tags: ['URGENT'] 
}; 

があるとしましょうか?ある場所では、日付を "2019年3月9日"とし、もう1ヶ月前に "1日前"(つまりMoment.jsを使用)と書いておきたいとしましょう。小数点以下の桁数

最初にコンテキスト値を文字列に変換してからテンプレートを実行することによって、値の書式を適用する唯一の方法はありますか? HTML自体でデータをどのようにフォーマットするかを指定すると便利です。

+0

あなたがHTMLで日付を変更するために、独自のカスタムハンドルヘルパーメソッドを追加することができます。 http://handlebarsjs.com/block_helpers.html – Goontracker

答えて

1

私はここにあなたのためのJSFiddleを作成しました:https://jsfiddle.net/ohL5bjqb/

Goontrackerはヘルパーの使用方法については正しかったです。ここでJSです:

var context = { 
    subject: "Hello", 
    from: "Joe", 
    date: "2017-03-09T16:34:20Z", 
    message: "Test message", 
    msg_size: 1243, 
    tags: ['URGENT'] 
}; 

Handlebars.registerHelper('parsedDate', function(person) { 
    return moment(context.date).format('MM/DD/YYYY') 
}); 

Handlebars.registerHelper('daysAgo', function(person) { 
    var now = moment(new Date()); //todays date 
    var end = moment(context.date); // another date 
    var duration = moment.duration(now.diff(end)); 
    var days = duration.asDays(); 
    return Math.round(days); 
}); 

var source = $("#some-template").html(); 
var template = Handlebars.compile(source); 
$('body').append(template(context)); 

そしてHTML:

<script id="some-template" type="text/x-handlebars-template"> 
    <div>Subject: {{subject}}</div> 
    <div>From: {{from}}</div> 
    <div>Message: {{message}}</div> 
    <div>Date: {{date}}</div> 
    <div>Parsed Date: {{parsedDate}}</div> 
    <div>Days Ago: {{daysAgo}}</div> 
</script> 

そして出力:

Subject: Hello 
From: Joe 
Message: Test message 
Date: 2017-03-09T16:34:20Z 
Parsed Date: 03/09/2017 
Days Ago: 1 
+0

明確な例をありがとう!これを少し調べた後、パラメータを渡すこともできるということを付け加えておきます(これはハンドルバーで[_literals_](http://handlebarsjs.com/#literals)と呼ばれています)。たとえば、{{parseDate format = "date"}}と{{parseDate format = "daysAgo"}}の両方の場合をカバーする 'format'パラメータも渡すことができます。ヘルパーコードでは、person.hash.format == "daysAgo"またはperson.hash.format == "date"をチェックして返すものを決定します。単一のヘルパーを構築して、特定のデータ型の複数のフォーマットを処理することは可能でしょうか。 – kashiraja

0

テンプレート自体にフォーマッタを入れる方法はありません、 テンプレートがテンプレート {fooIze「ANYTHING」}で、その後

handlebars.RegisterHelper("fooIze", function(){ 
    return "foo"; 
}); 

をレンダリングされる前に、あなたが探していることHandlebars.registerHelper ある。すなわち はこの http://jaskokoyn.com/2013/08/08/custom-helpers-handlebars-js-tutorial/

などの

foo 

としてレンダリングされます

関連する問題