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"}

問題は、最後ではなく、各オプションにファイルアップロードボタンを配置することです。最後に、送信ボタンは 1 つだけ必要です。「アップロード」ボタンが押されたときに両方の結果を報告する 2 つのフォームが必要ですか?

更新 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 do |key,value|
    %br
    %input{:type=>"checkbox", :name=>"#{key}", :value=>1, :checked=>value}
    =キー
  %input{:type => :submit, :value => "保存"}

#app.rb

「シナトラ」が必要
「haml」が必要

get '/' do
  @models = {"オレンジ" => true, "バナナ" => false}
  ハムル:アプリ
終わり

ポスト '/' する
  @params.inspect
終わり

于 2010-01-25T00:24:19.293 に答える
0

あなたが提供したリンクは、適切なhtmlを返す関数があるレールソリューションにリンクしています。

この関数を自分で定義できます。

入力: キー、値

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

def check_box(キー、値)

      ...

終わり

そしてそれをhamlで呼び出します

=check_box(キー,値)
于 2010-01-25T00:34:32.623 に答える