2016-07-26 79 views
0

我想傳遞和編譯我的自定義塊幫助中的參數。我發現params在一個哈希對象內,但是我怎樣才能將它們編譯成部分?通過句柄傳遞變量blockhelper

我想要參數flyoutClass被編譯到我的部分。一切工作正常,但在我的參數的時輸出應該是地方留成空...

車把幫手

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> 

叫我blockhelper

{{#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}} 

UPTADE

,並有可能從我的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]的參數是未編譯,[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> 

回答

1

您不能將flyoutClass參數「編譯」爲部分模板,因爲您打算將此參數設置爲動態。這意味着它是你的模板數據的真正的另一個參數:

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

UPDATE

...但沒有辦法添加PARAMS動態地?? [原文]

如果您希望傳遞給您的幫助器的所有參數,您可以簡單地在您的幫助器中擴展一個模板數據對象:options.hash

var data = Handlebars.Utils.extend({ body: options.fn(this) }, options.hash); 
var output = template(data); 
+0

WOW謝謝你;)的工作,但沒有辦法動態地添加參數?因爲我也想使用這個blockhelper作爲像我的fakescroller,dropdown等其他部分的generell助手。.. –