2009-04-07 9 views
13

私はレールを使用していますが、jQueryを使用して私のすべてのJavascriptを邪魔にならないでapplication.jsに行っています。Railsで邪魔にならないjQueryオートコンプリート

残念ながら、これはURLを参照するのが非常に困難です。たとえば、フィールドのオートコンプリート動作を指定する場合は、レールurl_forが使用できないため、オートコンプリートURLをapplication.jsにハードコードする必要があります。

application.jsはerbを使用できますか?私はこれを間違った方法で考えていますか?

答えて

6

バリデータを通過できないマークアップを気にしない場合は、フォームまたはフォームフィールドの属性にurlを追加し、その属性をjQueryで取得できます。 DHH @ Railsconf 09

2

はい、現在のレールバージョンではファイルapplication.js.erbを呼び出すことは可能です。古いバージョンでは、自分自身をロールバックするか、thisのようなものをつかむことができます。

+0

クール!これはここのベストプラクティスですか?この方法を使いますか?それは私にはいいようですが、私はまだ緊張しています。 –

+1

AFAIK、それは多くの人々がそれ自身でそれをやっていたので、それをレールにしました。これは非常に一般的な使用パターンです。 1つの注意点:これは経路のような半静的なものを注入するためのものです。内容がセッション内で変更される場合は、代わりにajaxラッパーでjavascriptを送信してください。 – MarkusQ

+0

これは実際には動作しないようです - 私は/ public/javascriptsからファイルを移動する必要がありますか?ファイルの名前を変更しただけでは、ブラウザが「application.js」を要求したときにルーティングエラーが発生します。 –

2

application.js.erbを実行しないでください。キャッシングが含まれていても、それは良い方法ではありません。エンドポイント(データを取得しているURL)をフォームのアクションURLと同じに自動完成させます。あなたのapplication.jsにそれに&ac=1を追加して、あなたのコントローラにそれを理解させてください。

1

あなたはit--だけのオートコンプリートを追加して、単一のJS関数を作成ハードコーディングする必要はありません:Railsの3.0はHTML5のカスタムデータ属性を使用してjavascriptのヘルパーで、このルートを下って行くかもしれないように見えます

リスナー、およびオートコンプリートのためのパラメータを受け取り、そしてあなたのテンプレートからそのJS関数を呼び出す:

(わかりやすくするために簡略化されたコード)

application.js:

function add_autocomplete(id, url) { 
    $("#" + id).autocomplete(
     source: url 
    ); 
}; 

application_helper.rb:

def add_autocomplete(id, url) 
    render :text => "<script> add_autocomplete('#{id}', '#{url}');</script>" 
end 

のERBテンプレート:

<input id="i_want_autocomplete" /> 
<%= add_autocomplete("i_want_autocomplete", items_js_path() %> 
関連する問題