2008-11-04 5 views
1

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

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

ИЛИ

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

На данный момент я держу все мои Jquery вещи в моем application.js, которая включена в моем макете. О да ... и я не использую Rails Edge.

С уважением,

Sebastian

ответ

2

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

<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

@changelog: thx много для вашего ответа.

Проблемы изображены ниже линии был решен путем заключения <%= 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 следующим образом (здесь applications.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 не отображается в источнике страницы, когда я его вызываю. Также функция предупреждения не вызывается. Вместо этого (в = =) javascript визуализируется в начале моего блока тела вместо головы, но при открытии страницы функция предупреждения не вызывается.

+0

Извините за проблемы. Я исправлю свой ответ для дальнейшего использования. Рад, что смог помочь. – changelog 2008-11-04 15:21:40

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