0

所以我正在尝试使用 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

对于{{selected}}mustache 模板中的值,我需要对当前正在迭代的数组项和传入的查询字符串值进行比较params[:phone_prefix],例如 is "09"。然后,当有匹配时,将值返回给传递给 mustache"selected"的方法。selected

任何帮助将不胜感激。

4

2 回答 2

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方法中获取信息。

Mustache 有意极简且没有逻辑,它甚至在主页上这样说

无逻辑模板。

所以你所有的逻辑都在你的代码中,你只需为 Mustache 设置一堆变量和标志来做事。模板中唯一可用的逻辑是“这件事是真的吗?” 和“我可以迭代这个东西吗?”;为 Mustache 准备数据的代码中必须包含比这更复杂的内容。

于 2011-09-19T23:01:57.573 回答
0

拉德!谢谢!那是一种享受。我最终使用了以下前缀方法,效果很好:

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
于 2011-09-20T21:21:40.087 回答