1

在作为 Sinatra 服务器的一部分实现的例程中,我有一个名为 @theModels 的字符串数组。这些模型是供用户选择的选项,由后端获取(想法是,随着新模型的添加,前端代码不应该改变)。

我正在使用haml来呈现html。

如何枚举@theModels 列表中的每个元素,使每个元素都是一个复选框?以及如何获取用户选择了哪些复选框?

我看到只是把

= @theModels

会给我@theModels 中包含的字符串列表,但没有空格等,当然也不会出现在复选框中。我发现这个问题似乎很相似,但是我的 haml-fu 还不足以将其转换为我需要的。

更新:

这些是与文件上传相关的选项,因此现在代码如下所示:

%form{:action=>"/Upload",:method=>"post",:enctype=>"multipart/form-data"}
- @theModelHash.each do |key,value|
  %br
  %input{:type=>"checkbox", :name=>"#{key}", :value=>1, :checked=>value}
  =key
  %input{:type=>"file",:name=>"file"}
  %input{:type=>"submit",:value=>"Upload"}

问题是,这会在每个选项上放置一个文件上传按钮,而不是在最后。最后我只想要一个提交按钮;当按下“上传”按钮时,我应该有两种报告结果的表格吗?

更新2:

想了想,上面可以修改为:

谢谢!

%form{:action=>"/Upload",:method=>"post",:enctype=>"multipart/form-data"}
- @theModelHash.each do |key,value|
  %br
  %input{:type=>"checkbox", :name=>"#{key}", :value=>1, :checked=>value}
  =key


%form{:action=>"/Upload",:method=>"post",:enctype=>"multipart/form-data"}
  %input{:type=>"file",:name=>"file"}
  %input{:type=>"submit",:value=>"Upload"}

这似乎做了我想要的。

4

2 回答 2

3

我认为您应该将内容作为哈希发送。这将使您有机会在表单中设置初始值。

哈希 @params 会给你结果。

例如{“橙子”=>“1”}

#app.haml

%form{:method => 'post', :action => "/"}
  - @models.each 做 |key,value|
    %br
    %input{:type=>"checkbox", :name=>"#{key}", :value=>1, :checked=>value}
    =键
  %input{:type => :submit, :value => "保存"}

#app.rb

需要'sinatra'
需要'haml'

得到'/'做
  @models = {“橙子”=> 真,“香蕉”=> 假}
  哈姆:应用程序
结尾

发布'/'做
  @params.inspect
结尾

于 2010-01-25T00:24:19.293 回答
0

您提供的链接链接到 rails 解决方案,您可以在其中有一个返回正确 html 的函数。

你可以自己定义这个函数:

输入:键、值

输出:%input{:type=>"checkbox", :name=>"#{key}", :value=>1, :checked=>value}

def check_box(键,值)

      ...

结尾

并用 haml 调用它

=check_box(键,值)
于 2010-01-25T00:34:32.623 回答