Как передать переменную Rails в функцию jQuery? - PullRequest
2 голосов
/ 28 ноября 2010

Я делаю очень простое приложение ROR (rails 2.3.5) и использую плагин jQuery jRails.Идея состоит в том, чтобы пообедать в модифицированном плеере jQuery youtube, который будет воспроизводить случайные видео из списка контроллера ror.html.erb

<div id="random">
<%=@clip%>
</div>

Ссылка здесь является, например, случайной ссылкой на YouTube.Вопрос для меня: как получить эту переменную в этой функции jQuery?

application.js

 $(document).ready(function(){
    $('#player').youTubeEmbed("http://www.youtube.com/watch?v=ZDFlmxmBne8")

});

Буду очень признателен за любую помощь.

Ответы [ 3 ]

4 голосов
/ 28 ноября 2010

Оставьте код вашего рельса как есть и в jQuery:

$(document).ready(function(){
  $('#player').youTubeEmbed($('#random').text())
});

Для расширенного доступа я бы изменил значение erb на:

<div id="random">
<%=link_to h(@clip), h(@clip) %>
</div>

, а затем JS:

$(document).ready(function(){
  $('#player').youTubeEmbed($('#random a').attr('href'));
  $('#random').hide();
});
2 голосов
/ 28 ноября 2010

Предполагая, что переменная содержит URL, например:

$(document).ready(function(){
    $('#player').youTubeEmbed("<%=escape_javascript(@clip)%>");
});

(Извините, пропустил тот факт, что JavaScript не был в том же файле, что и HTML - также не должно быть!)

Предполагая, что переменная содержит URL, если вы не хотите, чтобы URL отображался, вы можете встроить его в переменную страницы следующим образом (замените код div в show.html.erb следующим):

<script type='text/javascript'>
window.myStuff = {
    clipUrl: "<%=escape_javascript(@clip)%>"
};
</script>

... (или

<script type='text/javascript'>
var myStuff = {
    clipUrl: "<%=escape_javascript(@clip)%>"
};
</script>

... это почти одно и то же).

... и тогда вы можете использовать его так:

$(document).ready(function(){
    $('#player').youTubeEmbed(window.myStuff.clipUrl);
});

При выводе значения переменной таким способом вы должны убедиться, что то, что выписывается, в конечном итоге является допустимым JavaScript. Так, например, если переменная @clip содержит " или \, вам нужно убедиться, что " превращен в \" и что любой одиночный обратный слеш превращен в \\. Якуб Хэмпл (Jakub Hampl) услужливо указал на эту функцию escape_javascript, которую я отредактировал в примерах кода.

Это означает, что мы добавляем новый символ на window. Я сделал наш новый символ объектом, чтобы, если нам нужно было сделать это с другими вещами, мы могли бы включить их в этот же объект, чтобы мы не получали символы повсюду (создавая множество глобальных символов & mdash; к тому же, свойства window - это проблема обслуживания, которую лучше избегать). Например, если у вас было двух клипов:

<script type='text/javascript'>
window.myStuff = {
    someNiftyClip:      "<%=escape_javascript(@clip)%>",
    someOtherNiftyClip: "<%=escape_javascript(@anotherClip)%>"
};
</script>

Не по теме : обратите внимание, что в конце строки youTubeEmbed я добавил точку с запятой. Лучше не полагаться на JavaScript точка с запятой .

0 голосов
/ 28 ноября 2010

Вы можете поместить переменную в скрытое поле, а затем использовать ее в функции, такой как $ ('# hiddenFieldID'). Val ();

...