вызвать функцию рельсов из jquery? - PullRequest
1 голос
/ 04 ноября 2008

возможно ли как-то вызвать функцию rails или получить доступ к объекту rails из jQuery? Я хотел бы сделать что-то вроде:

jQuery(document).ready(function($) {
$('#mydiv').html("<%= @object.name %>");
});

OR

jQuery(document).ready(function($) {
$('#mydiv').html("<%= render :partial => "contacts" %>");
});

В данный момент я храню все свои jQuery в своем application.js, который включен в мой макет Ах да .... и я не использую Rails Edge.

С уважением,

Себастьян

Ответы [ 2 ]

2 голосов
/ 04 ноября 2008

Вам понадобится метод в контроллере, который будет отображать то, что вам нужно, если вы хотите это сделать. Еще один способ сделать это - использовать блоки вида, как в конце макета

<script type="text/javascript">
<%= yield :footerjs %>
</script>

и в представлении сделайте что-то вроде:

<% content_for :footerjs do %>
jQuery(document).ready(function($) {
$('#mydiv').html('<%= escape_javascript(render :partial => "contacts") %>');
});
<% end %>

Вам необходимо убедиться, что в части, которую вы будете рендерить, не будет символов, которые могут вызвать ошибки JavaScript (например, завершение кавычек до конца строки и т. Д.). Кроме того, некоторые браузеры не любят многострочные строки, поэтому вам также придется с этим поиграться.

0 голосов
/ 04 ноября 2008

@ changelog: большое спасибо за ваш ответ.

Проблема, изображенная под строкой, была решена путем включения <%= yield :myjs %> в соответствующие теги javascript следующим образом:

<script type="text/javascript">
<%= yield :myjs %>
</script>

Еще раз спасибо !!


Я пытался реализовать это так, как вы сказали, но у меня возникли некоторые трудности:

Я поместил следующий блок content_for в начало моего show.html.erb:

<% content_for :myjs do %>
jQuery(document).ready(function($) { alert('hello'); });
<% end %>

В моем layout.html я включаю весь javascript следующим образом (здесь application.js реализует некоторые общие функции jQuery):

<head>
...
<%= javascript_include_tag 'jquery', 'application' %>
<%= javascript_tag "var AUTH_TOKEN = #{form_authenticity_token.inspect};" if protect_against_forgery? %>
<% yield :myjs %>
</head>
<body>
...

Проблема в том, что мой javascript не отображается в источнике страницы, когда я его вызываю. Также функция оповещения не вызывается. Когда вместо этого я вставляю <%= yield :myjs %> (с =), javascript отображается в начале моего тела, а не в голове, но функция оповещения при открытии страницы не вызывается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...