2011-09-19 36 views
0

所以我試圖從使用Mustache和Sinatra的數組中提取選擇下拉列表。模板代碼目前看起來是這樣的:在Mustache塊循環中比較數組的值

<select id="phone_prefix" name="phone_prefix"> 
    {{#prefixes}} 
     <option value="{{to_s}}" {{selected}}>{{to_s}}</option> 
    {{/prefixes}} 
</select> 

隨着它被渲染陣列的每個項目查看以下方法:

def prefixes 
    ["03", "04", "06", "07", "09", "021", "022", "025", "027", "028", "029"] 
end 

對於小鬍子模板,我需要做的{{selected}}值比較當前迭代的數組項目和通過params[:phone_prefix]進入的查詢字符串值,例如"09"。然後當有匹配返回值"selected"selected方法傳遞給小鬍子。

任何幫助將不勝感激。

回答

0

將邏輯推送到您的Ruby中,並將數據提供給小鬍子。更新您的prefixes方法返回哈希數組:在您的模板這樣

def prefixes 
    # figure out which one is selected by asking params... 
    [ { :n => '03', :selected => false }, { :n => '04', :selected => true }, ... ] 
end 

,然後東西:

<select id="phone_prefix" name="phone_prefix"> 
    {{#prefixes}} 
     <option value="{{n}}" {{#selected}}selected="selected"{{/selected}}>{{n}}</option> 
    {{/prefixes}} 
</select> 

我只用小鬍子的JavaScript,所以我可能會丟失的東西紅寶石的味道,但接近的應該工作,你只需要從params到您的prefixes方法中獲取信息。

髭是故意簡約和自由邏輯,it even says so on the homepage

邏輯電更少的模板。

所以你所有的邏輯都在你的代碼中,你只需設置一堆變量和標誌讓小鬍子做事情。模板中唯一可用的邏輯是「這是真的嗎?」和「我可以迭代這件事嗎?」;任何比這個更復雜的東西都必須放在爲Moustache準備數據的代碼中。

0

Rad!謝謝!這很有用。我結束了以下方法的前綴,它很好用:

def prefixes 
    prefix_list = [{:n => "03", :selected => false}, {:n => "04", :selected => false}, {:n => "06", :selected => false}, {:n => "07", :selected => false}, {:n => "09", :selected => false}, {:n => "021", :selected => false}, {:n => "022", :selected => false}, {:n => "025", :selected => false}, {:n => "027", :selected => false}, {:n => "028", :selected => false}, {:n => "029", :selected => false}] 
    prefix_list.each do |i| 
    if i[:n] == "09" 
     i[:selected] = true 
    end 
    end 
    prefix_list 
end