2016-07-26 7 views
0

カスタムブロックヘルパーでパラメータを渡してコンパイルします。 paramsはハッシュオブジェクトの内部にあることがわかりましたが、どうすればそれらを部分的にコンパイルできますか?ハンドルバーを介して変数を渡すブロックヘルパー

私はPARAM flyoutClassが私の部分的にコンパイルすることにしたいです。 ...

すべてが正常に動作しますが、私のparamの出力があるべき場所は空のままです...

ハンドルバーは、私はすでにいくつかのことを試してみました

module.exports.register = function (Handlebars, context) { 
    Handlebars.registerHelper('injectHtml', function(name, options) { 
     console.log(options.hash); //yeah my param 
     var partial = Handlebars.partials[name]; 
     var template = Handlebars.compile(partial); 
     //var template = Handlebars.compile(partial)(options.hash); * 
     var output = template({"body": options.fn(this)});  
     return new Handlebars.SafeString(output); 
     //return new Handlebars.SafeString(output(options.hash)); * 
     //return new Handlebars.SafeString(partial(output)); * 
    }) 
}; 

ヘルパーが、私は常にその警告を受けます

警告:文字列が

.hbsが

ファイル機能ではありません
<div class="flyout {{flyoutClass}}"> 
    <button>flyout-button</button> 
    <div class="flyout__content"> 
     {{{body}}} 
    </div> 
</div> 

UPTADE

{{#injectHtml "flyout" flyoutClass='navigation__item'}} 
    <div class="wrapper"> 
     <h3>Headline</h3> 
     <p>some copy</p> 
     <button>CTA</button> 
    </div 
    <div class="wrapper"> 
     <h3>Headline</h3> 
     <p>some copy</p> 
     <button>CTA</button> 
    </div> 
{{/injectHtml}} 

私blockhelperを呼び出し、それは別の部分に自分のblockhelperからのparamを渡すことが可能ですか?

var output = template({ 
    "addClass": options.hash.addClass, 
    "id": options.hash.id, 
    "body": options.fn(this) 
}); 

私は "ID"

{{#injectHtml "flyout" flyoutClass='navigation__item'id='myUniqueID'}} 

とまた私の部分のボタンで

<div class="flyout {{flyoutClass}}"> 
    {{>button btn="icon-text" id="{{id}}"/*[1]*/ icon="arrow-down"label="klick me"}} 
    <div class="flyout__content" aria-labelledby="{{id}}"/*[2]*/> 
     {{{body}}} 
    </div> 
</div> 

しかし、[1]のparamがコンパイルされていない時に、それを使用して、この部分を拡張したいです、[2]うまく動作します。あなたが動的にするこのパラメータを意図しているため

<div class="flyout navigation__item"> 
    <a href="#" id="{{id}}"/*[1]*/ aria-expanded="false"> 
    <div class="flyout__content" aria-labelledby="myUniqueID"/*[2]*/> 
     //html content 
    </div> 
</div> 

答えて

関連する問題