2012-05-06 10 views
0

javascriptの中からrubyを呼び出す方法はありますか? たとえば、私はpartial => _micropost_form.html.erbを持っていて、ボタンをクリックすると別のdivに表示されます。私はそれを行うための最良の方法は、javascriptを使用することになると考えました。現在私は持っています:Ruby On Rails Javascript

document.getElementById("micropost").innerHTML= 

私はかなり失われています。私はこれがかなり簡単な問題であるべきだと思います。ありがとう!

EDIT:

だから私は私の_headerファイルにリンクを持っている:

<li>Add Content</li> 

のと同様のdiv:私のコンテンツコントローラで

<div id="popout"></div> 

私は方法があります:

def add_content 
@content = Content.new 
respond_to do |format| 
format.html 
format.js 
end 

同様に、私はしかし、私は<li>Add Content</li>で作ることになってるの呼び出しlink_toが関与を知って

$('#popout').replaceWith("<%= escape_javascript render 
      (:file => 'shared/_content_form') %>"); 

(_content_formが共有にあるhtml.erbファイルです)(ビュー/内容にあります)ファイルadd_content.js.erbをよ私はまだそれが正しく動作するようにすることができる必要があります。コンソールへの出力は通常、ページの更新のように見えます。どんな助けでも大歓迎です!

+0

あなたはこれらを見ましたか? http://stackoverflow.com/search?q=call+ruby+on+rails+function+from+javascript –

+0

私は実際に持っています。彼らは全く役に立たない。 – NSchulze

+0

少なくとも、Ajaxを使用してデータを取得する必要があることを示しています。そして、次のような質問があります。http://stackoverflow.com/search?q=ruby+on+rails+load+partial+ + ajaxで私は良い答えがあるかどうかは言えませんが(私はRoRとはうまくいかない)、質問は皆あなたと同じ方向に向いているようです。 –

答えて

0

ismaelgaによって解答に加えて、私はあなたが_micropost_form.html.erbで静的なHTMLコンテンツを持っているならば、それはerbファイルまたはpartialする必要がありますない理由はありませんことを追加したいと思います。その内容をhidden divに入れて、ボタンのクリックに基づいてその内容を切り替えることは良い解決策になります。

ただし、そのファイルに動的コンテンツがある場合は、AJAXを使用するのが最善の方法です。コメントにFelix Clingによって提供されるリンクのいくつかは良い出発点です。あなたはreplaceWithの代わりにjQueryのappendを使用することができ、

$('#micropost').replaceWith("<%= escape_javascript render(:file => 'micropost_form.html.erb') %>"); 

をまたは:私は自分自身が、あなたがしたいものを達成するためにかなりかかわら.js.erbファイルに次のコード行を使用して見つけます。

+0

あなたが提供したコード行はまさに私が探していたものです。しかし、私はそれが働くのに問題があります。私が以前に書いたjavascript関数では、代わりにあなたが上にあったものを呼び出すだけです。それはあなたがしなければならないことですか、そこには私が行方不明の複雑な部分がありますか?ありがとう! – NSchulze

+0

この行は 'client-side'ではなく' server-side'で実行されるので、 'javascript'ファイルに直接入れることはできません。 適切なコントローラでは、 'format.js'(通常は' AJAX'呼び出しで到達するか、 '.html'ではなく' .js'拡張子をウェブページ上に持つ 'respond_to'ブロックが必要です。 )。レンダリングされるビューは適切な ' .js.erb'です。 これはあなたがやっていることですか? –

+0

いいえ、まったくありません。私はそれを見て、私が理解できるものを見ます。ありがとう! – NSchulze

0

それはiframe内に表示されます

function appear_it() { 
    document.getElementById("micropost").innerHTML = "<iframe id="micropostframe" src="bla/whatever.html"></iframe>"; 
} 

その後、あなたはCSSでそれをスタイルすることができます。

属性onclick = "appear_it(); falseを返すボタンまたはリンクがあります。

+0

iframeは邪悪です! –

+0

@ ismaelga- WUT YOU SAY !?イフラームは人間を愛する野外の生き物です。 Gmailは20 iFramesのように使用されました – PitaJ

+0

google it: "iframes evil"実際には彼らは悪くはない、ほんの一部の人々はそれが想定されていない場合にそれを使用する。つまり、アプリケーションに属さないコンテンツを表示する必要があるときにiframeを使用する必要があるため、共有データ、スタイリング、何もありません。 Facebookは良い例です。彼らは外国のアプリケーションのためにそれを使って自分のページの中に現れ、そしておそらくGoogleはそれを似た目的のために使います。しかし誰もあなたの考えや方法を持っています。だれもあなたが外部のCSSファイルでページスタイリングをしなければならないと言ったように、実際には良いことです。 –

0

あなたが達成しようとしていることは、要求の「div」を隠してレンダリングして、それを表示するjs関数をトリガーすることだと思います。

"リンク"がレンダリングしたいものに対していくつかの条件を与えない限り、これは良い解決策になるはずです。たとえば、表示するものが1つだけの場合や、同じdivで異なるコンテンツを表示するリンクがたくさんある場合をクリックします。 2番目のケースが解決しようとしている場合は、実際にajax呼び出しをチェックする必要があります。 Btw JQueryはこの種のもののあなたの友人です。

+0

私は今のところトグルがうまくいくと思いますが、AJAXとjQueryの両方をもう少し詳しく調べる必要があります。ありがとう! – NSchulze