Передавать данные JavaScript из представления в функцию coffeescript - PullRequest
1 голос
/ 31 октября 2011

У меня есть представление, которое генерирует карту для определенного района (доступно в @district).Мой код построения карты - coffeescript, доступный для каждой страницы, но ему нужны данные, доступные в виде набора файлов json (district1.json, district2.json и т. Д.).Первый способ, которым я получил эту работу, состоял в том, чтобы загрузить эту переменную в моем представлении, сделав ее доступной глобально.

# in my view
<script type="text/javascript">
    var d_data = <%= render file: "#{Rails.root}/data/district_data/#{@district}.json" %>
&lt/script>

Затем я использую следующий coffeescript, принимающий эту глобальную переменную:

$(document).ready ->
  if $("#users-district-display")
    myLatLng = new google.maps.LatLng(d_data.centroid.lat,d_data.centroid.lon)

Это хорошо работает для этой страницы, но теперь я выдаю ошибки на всех страницах, которые не определяют d_data.Кроме того, я сделал эти json-файлы доступными по адресу mysite.com/district_data и собирался использовать .get для получения данных из ajax (и позволить представлению загружаться быстро), но мне все еще нужен параметр @district.

Я знаю, что могу просто визуализировать js как частичное, и я собираюсь сделать это, если я не найду способ заставить этот coffeescript работать.

Любые мысли приветствуются.

С уважением,

Тим

1 Ответ

1 голос
/ 31 октября 2011

Почему бы вам просто не проверить, были ли определены данные?

$(document).ready ->
  if $("#users-district-display") and d_data
    myLatLng = new google.maps.LatLng(d_data.centroid.lat,d_data.centroid.lon)

Также, если вы хотите создать новый объект LatLng с нулевыми параметрами, вы всегда можете использовать экзистенциальный оператор (?):

$(document).ready ->
  if $("#users-district-display")
    myLatLng = new google.maps.LatLng(
      d_data?.centroid.lat || 0
      d_data?.centroid.lon || 0
    )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...