我在作为Sinatra服务器的一部分实现的例程中有一个名为@theModels的字符串数组。这些模型是供用户选择的选项,由后端获取(想法是,随着新模型的添加,前端代码不应更改)。
我正在使用haml来渲染html。
如何枚举@theModels列表中的每个元素,使每个元素都是一个复选框?如何获取用户选择的复选框?
我看到只是把
= @theModels
会给我@theModels中包含的字符串列表,但没有间距等,当然也不在复选框中。我发现this question看似相似,但我的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"}
问题是,在每个选项上放置文件上传按钮,而不是在最后。我最后只想要一个提交按钮;我应该有两种形式,当按下“上传”按钮时,它们都会报告结果吗?
UPDATE2:
经过一段时间的思考,上面的内容可以修改为:
谢谢!
%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"}
这似乎做了我想做的事。
答案 0 :(得分:3)
我认为您应该将内容作为哈希发送。 这将使您有机会在表单中设置初始值。
hash @params将为您提供结果。
E.g。 { “桔子”=> “中1”}
#app.haml %form{:method => 'post', :action => "/"} - @models.each do |key,value| %br %input{:type=>"checkbox", :name=>"#{key}", :value=>1, :checked=>value} =key %input{:type => :submit, :value => "Save"} #app.rb require 'sinatra' require 'haml' get '/' do @models = {"oranges" => true, "bananas" => false} haml :app end post '/' do @params.inspect end
答案 1 :(得分:0)
您提供的链接链接到rails解决方案,其中您有一个函数返回正确的html。
您可以自己定义此功能:
Input: key, value Output: %input{:type=>"checkbox", :name=>"#{key}", :value=>1, :checked=>value} def check_box(key, value) ... end and call it in haml with =check_box(key,value)