2012-05-06 6 views
0

Есть ли способ позвонить рубину на функции рельсов из javascript? Например, у меня есть 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 

А также S add_content.js.erb файл (находится в/просмотров) содержание (_content_form представляет собой файл html.erb находится в разделяемой)

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

Я знаю, что вызов я должен сделать в <li>Add Content</li> включает link_to однако, Я еще не смог заставить его работать правильно. Вывод на консоль обычно выглядит как обновление страницы. Любая помощь будет принята с благодарностью!

+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, я хотел бы добавить, что если у вас есть статический контент HTML в _micropost_form.html.erb, то нет никаких причин, почему это должно быть erb файл или partial. Наличие этого контента в пределах hidden div, а затем переключение на то, что на основе нажатия кнопки будет хорошим решением.

Если, однако, у вас есть динамический контент в этом файле, то лучше всего использовать AJAX. Некоторые из ссылок, предоставленных Felix Cling в комментариях, являются хорошей отправной точкой.Я считаю себя, используя следующую строку кода в файле .js.erb совсем немного, хотя добиться того, что вы хотите:

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

Или, вы можете использовать JQuery append вместо replaceWith.

+0

Строка кода, которую вы предоставили, именно то, что я искал. Однако у меня возникают проблемы с его работой. В javascript-функции, которую я написал ранее, я вместо этого просто называю то, что у вас было выше. Это все, что вам нужно сделать или есть какая-то сложность, которую я не хватает? Благодаря! – NSchulze

+0

Эта строка выполняется 'server-side', а не' client-side' - поэтому вы не можете включить ее прямо в файл 'javascript'. В соответствующем контроллере вам нужно иметь блок 'reply_to' с' format.js' (который обычно достигается посредством вызова 'AJAX' или с расширением' .js' на веб-странице вместо '.html' .). Представление, которое затем отображается, является подходящим ' .js.erb'. Это то, что вы делаете? –

+0

Нет, совсем нет. Я рассмотрю это и посмотрю, что я могу понять. Благодаря! – NSchulze

0

сделать вид, в IFRAME:

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

Тогда вы можете стилизовать с помощью CSS.

Имейте кнопку или ссылку с атрибутом onclick = "appearance_it(), return false".

+0

iframe are evil !! –

+0

@ ismaelga- WUT YOU SAY !? Iframes - это громадное существо, которое любит людей. Gmail используется как 20 iFrames – PitaJ

+0

google it: «iframes evil». На самом деле они не злые, только некоторые люди используют его в тех случаях, когда это не должно было случиться. Я имею в виду, что iframe следует использовать, когда вам нужно показать какой-то контент, который НЕ принадлежит вашему приложению, поэтому нет данных совместного доступа, стилей, ничего. Facebook - хороший пример, они используют его для иностранных приложений, чтобы отображаться внутри их страницы, и, возможно, Google использует его для аналогичных целей. Но у всех есть свои мысли и способы делать вещи, как никто не сказал, что вы ДОЛЖНЫ делать стиль страницы в внешнем файле css, но на самом деле это хорошо. –

0

Я думаю, что вы пытаетесь достичь, отринув, что «div» по запросу как скрытый, а затем ссылка вызывает функцию js, чтобы показать ее.

Это должно быть хорошим решением, если только эта ссылка не привносит некоторые условные выражения для того, что вы хотите визуализировать, например, если есть только одна вещь для отображения, или если у вас есть много ссылок для отображения в одном и том же div разных содержаниях в зависимости от по ссылке, которую вы нажимаете. Если второй случай - тот, который вы пытаетесь решить, вы должны действительно проверить ajax-вызовы. Btw JQuery - ваш друг для такого рода вещей.

+0

Я думаю, что toggle будет работать для меня на данный момент, но мне нужно будет немного изучить AJAX и jQuery. Благодаря! – NSchulze

Смежные вопросы