Передача параметров в / из JavaScript & Rails



В моем приложении Rails у меня есть вспомогательный метод location это возвращает координаты для данного IP-адреса и делает их доступными для всех контроллеров и представлений. Например:location.latitude возвращает широту пользователя. Вы поняли идею.



У меня также есть Javascript, который рисует карту из Google Maps API на основе заданной пары lat/lon. Проблема в том, что я понятия не имею, как сдать экзамен.location парамы в JavaScript!



JavaScript находится в применении.js' и выглядит так:



$(document).ready(function() 
{

//Map options...I want the params to go into the var 'MapOptions' below

function initialize() {
var mapOptions = {
center: new google.maps.LatLng(40.764698,-73.978972),
zoom: 13,
mapTypeId: google.maps.MapTypeId.ROADMAP
};

//Setup and Draw the Map...
//....................................
};


Сама карта вызывается в HTML примерно так. Нет очевидного способа пройти парамы.



<div id="map_canvas">
<!-- The Map gets drawn here! -->
</div>


Я знаю, что это, вероятно, очевидный вопрос, но мне никогда раньше не приходилось передавать параметр из моего приложения в Javascript таким образом.
617   4  

4 ответов:

Я думаю, что атрибуты данных здесь хорошо работают.

Html

<div id="map_canvas" data-latitude="40.764698" data-longitude="-73.978972">
  <!-- The Map gets drawn here! -->
</div>

Или с вашими помощниками

<div id="map_canvas" data-latitude="<%= location.latitude %>" data-longitude="<%= location.longitude %>">
  <!-- The Map gets drawn here! -->
</div>

Js

$(document).ready(function() { 

  //Map options...I want the params to go into the var 'MapOptions' below

  function initialize() {
    var mapDiv = $('#map_canvas');
    var lat = mapDiv.data('latitude'),
        lng = mapDiv.data('longitude');

    var mapOptions = {
      center: new google.maps.LatLng(lat,lng),
      zoom: 13,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    };

  //Setup and Draw the Map...
  //....................................
};

Вы можете назначить lat и long скрытым полям в представлении. И в ваших приложениях.JS script просто получить их, как $("#lat").val() не окончательное решение, но должно хорошо работать.

Передача данных в javascript может быть упрощена с помощью Gon gem
Например, определите что-нибудь с помощью gon в вашем контроллере:

class FooController < ApplicationController

  def show_map
    #....
    gon.mapLatLong = [40.764698,-73.978972]

Далее выведите этот тег erb в своем представлении

<%= include_gon %>

Значенияgon , определенные в этом контроллере, будут изменены в переменные javascript в ваших представлениях. Таким образом, вы можете написать это так в своем javascript

center: new google.maps.LatLng(gon.mapLatLong[0],gon.mapLatLong[1]),

Reference:
https://github.com/gazay/gon
http://railscasts.com/episodes/324-passing-data-to-javascript

Посмотрите на следующую страницу, которая объясняет, как передавать данные в JavaScript: http://railscasts.com/episodes/324-passing-data-to-javascript?view=asciicast

Короче говоря, просто используйте:

<%= javascript_tag do %>
   window.productsURL = '<%= j products_url %>';
<% end %>

А затем обратитесь к productsURL в любом месте ваших сценариев.

Comments

    Ничего не найдено.