#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.