Ruby on Rails には、何時間もかけて試しても解決できない問題がいくつかあります。皆さんが私を助けてくれることを願っています。4 つの質問は、行頭に Q1 ~ Q4 とマークされています。
ビューに複数回必要な要素があります。このため、lib フォルダーに別のモジュールが必要です (そのため、他のプロジェクトでも使用できます)。
必要なもの: - 任意のビューから自動的に呼び出すことができるヘルパー メソッド。- より多くの html が必要なため、ヘルパー メソッドでレンダリングする html ファイルを使用したいと考えています。- パラメータを JavaScript ファイルに渡します。- 要素を使用する場合、JavaScript ファイルを含める必要があります - 要素を使用する場合、CSS ファイルを含める必要があります
ちょっと分かりにくいので、簡単な例でもう一度説明します(あくまで例ですので、意味はあまり考えないでください)。ヘルパーまたは代わりに JavaScript メソッドを使用します。明らかに、(html) - ドロップダウン ボックスの上に配置されたテキスト入力フィールド (js) - ドロップダウン ボックスの選択された項目をテキスト ボックスに表示する関数が必要です。(css) - ドロップダウンの前に配置されるテキスト ボックスのスタイル。(設定) - どこでも自動的に使用できるように要素を初期化する設定ファイル。
私が想像するフォルダ構造:
- ライブラリ
- コンボボックス
- コンボボックスヘルパー.rb
- _combo_box.html.erb
- コンボボックス.js
- コンボボックス.css
- コンボボックス
ombo_box-helper.rb には 2 つのメソッドがあります。
- コンボボックスフィールド(drop_down_content)
このメソッドは、パーシャルを使用してコンボボックスを返します。アレイ エントリは、ドロップダウン ボックスで使用できます。
- ombo_box_js(drop_down_content)
javascript を使用してコンボ ボックスを作成する場合は、このメソッドを呼び出す必要があります。コンボボックスを 1 回だけ変更するには、要素もパーシャルで作成し、javascript に渡す必要があります。
ここに最初の問題が表示されます。
Q1 : メソッドの最初の呼び出し時 (最初の呼び出し時のみ) に、js および css ファイルを含める必要があります。これを行う一般的な方法は何ですか?
Q2 : app/view フォルダーではなく、lib フォルダーにあるパーシャルをレンダリングするにはどうすればよいですか?
Q3 : javascript にパラメータを渡す一般的な方法は何ですか?
私の最初の試み:
module ComboBoxHelper
def combo_box_field(drop_down_content)
output = check_first_call
output + render(:partial => 'combo_box', :locals => {:content => drop_down_content})
end
def
output = check_first_call
output + "<div class='hidden' data-combobox = '" + render(:partial => 'combo_box', :locals => {:content => drop_down_content}) + "'></div>"
end
def check_first_call
if @already_called
""
else
@already_called = true
javascript_include_tag("combo_box.js") + stylesheet_link_tag("combo_box.css")
end
end
end
問題:
- render-method が機能しない (app/view でパーシャルを検索します)
- check_first_call の呼び出しは醜いです。特に文字列を返すためです。
- javascript と css のインクルードが機能しない (ファイルがアセット パイプラインにない)
.html.erb および .css ファイルの内容は一目瞭然です。JavaScript ファイルの興味深い部分は、Ruby on Rails から渡されたパラメーターにアクセスしようとする試みです。
$('div.hidden[data-combobox]').data("combobox")
これらの問題が解決された場合、重要なことは 1 つだけです。それは、モジュールを正しく初期化して、どこでも自動的に使用できるようにすることです。
私の最初の試み: config/initializers/init_combo_box フォルダーにそのコードでファイルを作成します。
require_dependency 'combo_box/combo_box_helper'
ActiveSupport.on_load(:action_view) do
include ComboBoxHelper
end
Q4 : これが一般的な方法ですか?上記の問題のいずれかを解決するために追加するものはありますか (たとえば、アセット パイプラインに js ファイルと css ファイルを追加するなど)?
ご協力いただきありがとうございます。