Rails: доступ к переменной экземпляра из не встроенного JS - PullRequest
1 голос
/ 03 апреля 2012

У меня есть этот код в .html.erb файле:

<script src="http://connect.facebook.net/en_US/all.js#xfbml=1"></script>
<script>
  FB.Event.subscribe('edge.create',
      function(response) {
          send_fb_like();
      }
  );
  FB.Event.subscribe('edge.remove',
      function(response) {
          send_fb_unlike();
      }
  );
  function send_fb_like()
  {
    var business_name = '<%= @consumer.name %>';
    alert("You liked"+consumer_name);
  }
  function send_fb_unlike()
  {
    var business_name = '<%= @consumer.name %>';
    alert("You unliked"+consumer_name);
  }

</script>

Это работает правильно, и я могу получить доступ к @consumer.nameправильно.Однако, если я изменю это на:

Где facebook_consumer.js выглядит следующим образом:

$(function(){

FB.Event.subscribe('edge.create',
          function(response) {
              send_fb_like();
          }
      );
      FB.Event.subscribe('edge.remove',
          function(response) {
              send_fb_unlike();
          }
      );
      function send_fb_like()
      {
        var business_name = '<%= @consumer.name %>';
        alert("You liked"+consumer_name);
      }
      function send_fb_unlike()
      {
        var business_name = '<%= @consumer.name %>';
        alert("You unliked"+consumer_name);
      }


});

Будет выведено следующее:

Вам понравилось <%= @consumer.name %>.Я попытался сохранить файл как js.erb, но потом кажется, что он не знает, что такое @consumer.

Есть мысли о том, какой подход лучше?

Ответы [ 2 ]

2 голосов
/ 03 апреля 2012

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

<script type="text/javascript">
    app = app || {}
    app.keyName1 = "<%= @variable1 %>";
    app.keyName2 = "<%= @variable2 %>";
</script>
1 голос
/ 03 апреля 2012

Вы не можете встроить код Ruby в файлы .js.Если вы хотите использовать код Ruby, вам нужно создать файл .js.erb, а затем отрисовать его часть внутри.

# controller
render :partial => "/path/to/js/partial.js.erb"

# inside your JS partial
# you can use <%= @consumer.name %> freely in this file
# and then add the line below to render your normal html.erb file
$("#reviews").append("<%= escape_javascript(render(:partial => '/path/to/partial.html.erb' )) %>");
...