Использование массива в coffeescript

Я использую google-maps-for-rails (gmap4rails). У драгоценного камня есть метод, создающий массив для использования в javascript.

hash = Gmaps4rails.build_markers(@users) do |user, marker|
 marker.lat user.latitude
 marker.lng user.longitude
end

Это приводит к следующему:

[{:lat=>33.462209, :lng=>-86.812519, :infowindow=>"hello"}]

или проще читать

[
  {
   :lat => 33.462209,
   :lng => -86.812519,
   :infowindow => "hello"
  }
]

Я пытаюсь использовать это в coffeescript, но я передаю этот массив в coffeescript из переменной в моем контроллере. (Я использую Paloma JS для специфичных для страниц js, где вы можете получить доступ к переменным контроллера в своем coffeescript.)

Я пытался преобразовать массив в JSON и использовал gsub для замены символов, но у меня возникли трудности.

В частности, я попытался преобразовать в JSON, а затем удалить запятые, hash.to_json.gsub(/,/, ''), что выводит

[{"lat":33.462209"lng":-86.812519"infowindow":"hello"}]

Я думаю, что мне нужно удалить скобки, { и } здесь, и, возможно, включить правильные отступы строки для coffeescript.

В итоге должно получиться так:

[
  lat: 33.462209
  lng: -86.812519
  infowindow: "hello"
]

Любые идеи?? Спасибо за время.


person Justin    schedule 03.07.2014    source источник
comment
«Массив», который, как вы говорите, вам нужен в конце, не является массивом. Ты действительно уверен, что хочешь этого?   -  person Jon    schedule 03.07.2014


Ответы (1)


Я пытался преобразовать массив в JSON и использовал gsub для замены символов, но у меня возникли трудности.

Вы должны просто использовать JSON, который вы создаете, как есть. Это полностью действительный CoffeeScript. Нет никакой причины вообще пытаться что-то из него вырезать.

CoffeeScript, который вы пытаетесь создать, в любом случае идентичен. Этот...

[
  lat: 33.462209
  lng: -86.812519
  infowindow: "hello"
]

на самом деле [{ lat: ..., lng: ..., }], запятые и {} скрыты, но все еще синтаксически присутствуют. CoffeeScript позволяет вам опустить {} при определении литерала объекта, но это все еще литерал объекта, и вы ничего не получите, удалив их из вашего JSON. В любом случае структура, которую вы создаете, будет идентична: массив, содержащий один элемент, который является объектом, содержащим свойства lat/lng/infowindow.

person meagar    schedule 03.07.2014