2013-08-28 47 views
3

TL; DRHandlebars.js - 建立一個模板模板

在下面的把手模板...

<div class="field field-label"> 
    <label>{{label}}</label><input type="text" value="{{{{attribute}}}}"> 
</div> 

我需要的{{屬性}}進行評估,但value="{{值屬性}}"要打印。

背景

我已經有了一個模板一個有趣的使用。我的應用程序有幾十個表單(並且不斷增長!),以及幾種顯示它們的方法。顯然,它們可以顯示在瀏覽器,移動設備或PDF等等中。所以我想要做的就是用JSON定義這些表單,以便像MongoDB那樣生活。這樣,即使不更新HTML視圖,移動應用和PDF渲染功能,也可以輕鬆修改它們。

{ 
    title: 'Name of this Form', 
    version: 2, 
    sections: [ 
    { 
     title: 'Section Title', 
     fields: [ 
     { 
      label: 'Person', 
      name: 'firstname', 
      attribute: 'FIRST', 
      type: 'text' 
     }, { 
      label: 'Birthday', 
      name: 'dob', 
      attribute: 'birthday', 
      type: 'select', 
      options: [ 
      { label: 'August' }, 
      { label: 'September' }, 
      { label: 'October' } 
      ] 
     }, 
     ... 
     ... 

這是一種滋味。所以type: 'text'結果<input type="text">,name是輸入的名稱,attribute是來自模型yada yada的屬性。它與嵌套的可選表單相當複雜,但你明白了。

問題是,現在我有兩個上下文。第一個是帶有表單數據的JSON,第二個是來自模型的JSON。我認爲有兩個選擇我認爲會很好。

溶液1

包含已註冊作爲輔助模型上下文快速小閉合。

var fn = (function(model) { 
    return function(attr) { 
    return model[attr] 
    } 
})(model); 

Handlebars.registerHelper('model', fn) 

...使用像這樣...

<input type="text" name="{{name}}" value="{{model attribute}}"> 

溶液2張

兩個通行證。讓我的模板輸出一個模板,然後我可以使用我的模型進行編譯和運行。一個很大的優點,我可以預編譯表單。我更喜歡這種方法。這是我的問題。 如何從我的模板中打印出{{屬性}}?

例如,在我的文本模板...

<div class="field field-label"> 
    <label>{{label}}</label><input type="text" value="{{{{attribute}}}}"> 
</div> 

我需要{{attribute}}進行評估和{{屬性}的值}進行打印。

+0

我想我可以用一個幫手來打印'{{}}'呵呵...... –

+0

Soln 1看起來不錯。 –

回答

0

我去了解決方案2,有點。對我來說,我可以預先編譯表單sans數據對我很重要。所以我所做的只是添加了一些幫助功能...

Handlebars.registerHelper('FormAttribute', function(attribute) { 
    return new Handlebars.SafeString('{{'+attribute+'}}');  
}); 

Handlebars.registerHelper('FormChecked', function(attribute) { 
    return new Handlebars.SafeString('{{#if ' + attribute + '}}checked="checked"{{/if}}'); 
}); 

...我可以在我的表單模板中使用...

<input type="text" name="{{name}}" value="{{FormAttribute attribute}}"> 

...導致......

<input type="text" name="FirstName" value="{{FirstName}}"> 

我仍然有興趣瞭解是否有一些方法有把手忽略,而不是解析大括號{{}}不使用助手。