Ruby 比较Mustache块循环中数组的值
因此,我尝试使用Mustache和Sinatra从数组中渲染一个select下拉列表。模板代码当前如下所示:Ruby 比较Mustache块循环中数组的值,ruby,arrays,sinatra,mustache,Ruby,Arrays,Sinatra,Mustache,因此,我尝试使用Mustache和Sinatra从数组中渲染一个select下拉列表。模板代码当前如下所示: <select id="phone_prefix" name="phone_prefix"> {{#prefixes}} <option value="{{to_s}}" {{selected}}>{{to_s}}</option> {{/prefixes}} </select> 对于mustache模板中
<select id="phone_prefix" name="phone_prefix">
{{#prefixes}}
<option value="{{to_s}}" {{selected}}>{{to_s}}</option>
{{/prefixes}}
</select>
对于mustache模板中的{selected}}值,我需要对当前正在迭代的数组项和通过params[:phone_prefix]传入的查询字符串值进行比较,例如09。然后,当存在匹配时,将selected的值返回给要传递给mustach的选定方法
任何帮助都将不胜感激。将逻辑推送到您的Ruby中,只需将数据馈送到Mustach即可。更新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中使用了Mustache,所以我可能在Ruby风格中缺少了一些东西,但是类似的东西应该可以工作,您只需要将params中的信息输入到prefixes方法中
小胡子是刻意简约的,没有逻辑性:
无逻辑模板
所以所有的逻辑都在代码中,您只需为Mustach设置一组变量和标志即可。模板中唯一可用的逻辑是这是真的吗?我能重复一下吗?;任何比这更复杂的东西都必须放在为小胡子准备数据的代码中。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
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