所以我试图使用Mustache和Sinatra从数组中渲染一个选择下拉列表。模板代码目前如下所示:
<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
对于mustache模板中的{{selected}}
值,我需要对当前正在迭代的数组项进行比较,并通过params[:phone_prefix]
进行查询字符串值,例如"09"
}。然后,当匹配时,将"selected"
的值返回到selected
方法以传递给小胡子。
非常感谢任何帮助。
答案 0 :(得分:0)
将逻辑推入Ruby并将数据提供给Mustache。更新您的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
方法中。
小胡子故意是简约的,没有逻辑,it even says so on the homepage:
无逻辑模板。
所以你的所有逻辑都在你的代码中,你只需为Mustache设置一堆变量和标志即可。模板中唯一可用的逻辑是“这是真的吗?”并且“我可以迭代这件事吗?”;任何比这更复杂的事情都必须在为Mustache准备数据的代码中。
答案 1 :(得分: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