gpt4 book ai didi

javascript - js.coffee.erb - 同步问题?

转载 作者:行者123 更新时间:2023-12-02 19:13:55 25 4
gpt4 key购买 nike

我正在尝试将数据库中的纬度和经度值插入到我的谷歌地图 CoffeeScript 中。

jQuery ->
initialize()

initialize = ->
myOptions =
center: new google.maps.LatLng(<%= @location.latitude %>, <%= @location.longitude %>)
zoom: 12
mapTypeControlOptions: {mapTypeIds: ["OSM", "OCM", "MQ", google.maps.MapTypeId.HYBRID]}
map = new google.maps.Map $('#map_canvas')[0], myOptions

[...]

我收到以下错误消息:

 undefined method `latitude' for nil:NilClass
(in /Users/sg/rails-projects/geo_rails_test/app/assets/javascripts/gmap.js.coffee.erb)

建议我的位置对象

@location = Location.find(params[:id])

在解析 js.coffee.erb 文件时尚未实例化。 (?)

我已经用硬编码值测试了 CoffeeScript,在我看来 @location.latitude 工作得很好。知道出了什么问题吗?

最佳答案

在您的 Controller 运行之前,您的 (Java|Coffee)Script 资源将被处理并发送到浏览器。这意味着 @location 不会来自您的 Controller ,它将来自 .js.coffee.erb 时恰好出现的任何 self > 转换为 JavaScript。部署到生产环境时, Assets 将(或至少应该)在任何内容到达生产系统之前进行编译,因此 @location 没有任何有用的希望。

您应该在 Controller 的 ERB 而不是 Assets 中构建数据:

<!-- Somewhere in the appropriate app/views/... file... -->
<script type="text/javascript">
window.global_location = { lat: <%= @location.latitude %>, lng: <%= @location.longitude %> };
</script>

然后您的 Assets 就可以通过 this_location 全局获取数据:

center: new google.maps.LatLng(global_loc.lat, global_loc.lng)

或者您可以尝试通过 AJAX 调用加载位置。

仅在 Assets 中使用 ERB 来获取每个应用程序的常量和配置值,不要尝试在 Assets 中使用 ERB 来获取应用程序运行时会发生变化的任何内容。

关于javascript - js.coffee.erb - 同步问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13352892/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com