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

#javascript #ruby-on-rails #json #coffeescript

#javascript #ruby-on-rails #json #coffeescript

Вопрос:

Я использую google-maps-for-rails (gmap4rails). В gem есть метод, который создает массив для использования в 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"
]
  

Есть идеи?? Спасибо, что уделили время.

Комментарии:

1. «Массив», который, как вы говорите, вам требуется в конце, не является массивом. Вы действительно уверены, что это то, чего вы хотите?

Ответ №1:

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

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

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

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

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