2013-10-09 47 views
2

值我有一個dust.js模板文件,我通過2個數組:Dust.js如果在陣列

  • 1條,下拉多個選項陣列選擇
  • 1陣列的選擇的選項

如何在dust.js中選擇下拉列表中的選項?

下面是一個例子:

我發送到模板中的數據

var selectOptions = [1,2,3,4,5,6,7,8,9,10,11,12,13]; 
var selectedValues = [3,7,9]; 

模板

<select multiple> 
    {#selectOptions} 
     <option>{.}</option> 
    {/selectOptions} 
</select> 

我如何使用{} selectedValues選擇那些選擇?

在此先感謝您的幫助。

回答

2

另一個解決方案可以讓你的dust.js模板更清潔,將兩個列表組合成一個新的對象列表。

因此,使用以前的數據例如:

var selectOptions = [1,2,3,4,5,6,7,8,9,10,11,12,13]; 
var selectedValues = [3,7,9]; 
var options = []; 
for(var i=0;i<selectOptions.length;i++){ 
    var item = selectOptions[i]; 
    // Option object containing selected value + selected info 
    var option = { value : item, selected : selectedValues.indexOf(item) > -1 }; 
    options.push(option); 
} 

你dust.js模板現在這個樣子:

<select multiple> 
{#options} 
    <option {?selected}selected="true"{/selected}>{value}</option> 
{/options} 
</select> 
+0

這或多或少是我最終做的,但是不是在做這個而不是修改我的對象? – denislexic

+1

修改你的對象使它更清潔dust.js否則你需要像Simon提出的那樣做,但它也意味着迭代每個項目的列表。灰塵。js是一個模板引擎,它支持模板內的最小代碼「技巧」,因此在這種情況下,JS代碼更受青睞。 –

5

添加的另一個循環來投奔您選擇的選項

<select multiple> 
    {#selectOptions} 
     <option 
      {#selectedValues val=.} 
       {@eq key="{val}" value="{.}"}selected="true"{/eq} 
      {/selectedValues} 
     >{.}</option> 
    {/selectOptions} 
</select> 

請注意,我使用的防塵助手從LinkedIn提供平等的比較。

+0

聽起來像是一個很好的解決方案,現在就試試看。不能相信它之前沒有來過我:) – denislexic

+0

humm ...似乎沒有工作。雙重嵌套給了我相同的價值。即{val}和{。}完全相同。有任何想法嗎? – denislexic

+0

我的不好,你不需要內聯參數聲明中的花括號。我編輯了模板。所以,而不是'val = {。}''只需使用'val = .' – Simon

0

不完全與此相關的具體問題,但可能是有用的人。您可以創建一個全球性的幫手,不只是說:

_.extend dust.helpers, 

    contains: (chunk, context, bodies, params) -> 
    if _.contains params.array, params.key 
     chunk = bodies.block(chunk, context) 

    chunk 

我用的CoffeeScript和Underscore.js但它容易翻譯到普通的JavaScript。

用法:

// options = ["foo", "bar"] 
{@contains array=options key="bar"} 
    Bar is an option. 
{/contains} 

還有一個插件,更加廣泛,與dustjs-helpers-extra相同的功能。

有關如何到create global helpers的更多信息。