2013-07-26 16 views
7

他のヘルパー関数でヘルパー関数を使用したいと思います。以下のコードでは、「Finch」という単語が含まれている場合、姓を強調したいと思います。私はwritternヘルパークラスを持っています。 hbsファイルで使用する場合、構文は{{highlight name}}になります。 しかし、私は別のヘルパークラスでそれを使用しなければならないので、それを使う方法。以下は別のカスタムヘルパーでカスタムヘルパー関数を呼び出す方法

は私のコードです:ここでは

Handlebars.registerHelper('fullName', function(person) { 
    return person.firstName + " " + person.lastName; 
    }); 

    Handlebars.registerHelper('highlight', function(person) {  
var item = (person.lastName).replace('Finch', '<span style="color: red">' 
    + Finch + '</span>'); 
return new Handlebars.SafeString(item); 
    }); 

が作業フィドルです:http://jsfiddle.net/wC6JT/4/

ここで "ハイライト" のヘルパーが呼び出されるフィドル:http://jsfiddle.net/wC6JT/3/です。これは、 "highlight"レジスタヘルパーで認識されないperson.lastNameに対するコンソールエラーを取得するため、結果を生成しません。

person.lastNameのフルネームヘルパーで「ハイライト」ヘルパーを使用したいと思います。 これはどのように達成できますか。

+0

@muistooshort:コードとフィドルを更新しました。そのタイプミス。それは人物です。最後の名前 – Cindrella

答えて

4

最初のメソッドで使用したいメソッドの内容を、独自のjavascriptメソッドに抽出します。その後、必要に応じて両方のヘルパーでそのjavascriptメソッドを呼び出します。

いずれかのメソッドの内容を独自のjavascriptメソッドにリファクタリングしない限り、実行できません。

だからあなたの場合には、それは次のようになります。

Handlebars.registerHelper('fullName', function(person) { 
    return person.firstName + " " + highlightJavascript(person); 
    }); 

Handlebars.registerHelper('highlight', highlightJavascript); 

highlightJavascript : function(person) { 
    var item = (person.lastName).replace('Finch', '<span style="color: red">' 
    + Finch + '</span>'); 
return new Handlebars.SafeString(item); 
} 
+0

ここはフィドルです:それはうまくいきませんでした。 http://jsfiddle.net/wC6JT/14/。ハイライトヘルパーを削除すると、htmlの代わりにタグが表示されます。 – Cindrella

+0

フィドルで何がうまくいかなかったのか分かりませんが、私はアプリケーションとそれが完璧に動作するように実装しました。ありがとうございました。 – Cindrella

+1

Handlebars.registerHelper( 'highlight'、highlightJavascript(person)); 'be' Handlebars.registerHelper( 'highlight'、highlightJavascript); '?関数を呼び出すのではなく、 'registerHelper'を与えたいとします。 –

1

をあなたがこの方法を使用することができます。http://goo.gl/oY4IIO は、文字列を連結する必要はありません。

<script id="tmp" type="text/x-handlebars-template"> 
    <p>test: {{test "2.3333333"}}</p> 
    <p>format: {{format "2.3333333"}}</p> 
</script> 

Handlebars.registerHelper('format', function (value) { 
    return parseFloat(value).toFixed(2); 
}); 
Handlebars.registerHelper('test', function (value) { 
    var source = '{{format x}}'; 
    var context = {x:value}; 
    var html = Handlebars.compile(source)(context); 
    return new Handlebars.SafeString(html); 
}); 
$(document).ready(function() { 
    var source = $('#tmp').html(); 
    var template = Handlebars.compile(source); 
    var html = template(); 

    $('#main').html(html); 
}); 

出力: テスト:2.33 フォーマット:2.33

+0

リンクの変更内容が無効である場合と同様に、リンクのメインコンテンツをここに含める必要があります。 –

+0

@ user3250923:こんにちは。しかし、長い時間の後。リンクありがとう。リンクの内容を含めてください。 – Cindrella

2

が他の関数からハンドルバーヘルパーを呼び出すには、使用することができHandlebars.helpers:ここでは

Handlebars.registerHelper('fullName', function(person) { 
    var lastName = Handlebars.helpers.highlight.apply(this, [person.lastName]); 
    var firstName = Handlebars.Utils.escapeExpression(person.firstName); 
    return new Handlebars.SafeString(firstName + " " + lastName); 
}); 

Handlebars.registerHelper('highlight', function(str) {  
    var safeStr = Handlebars.Utils.escapeExpression(str); 
    var item = safeStr.replace("Finch", "<em>Finch</em>"); 
    return new Handlebars.SafeString(item); 
}); 

動作中のフィドルです:別の例として、this blog postをお読みください。13230

関連する問題