将javascript数据从视图传递到coffeescript函数

时间:2011-10-31 12:48:55

标签: javascript ruby-on-rails coffeescript

我有一个为特定区域生成地图的视图(在@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" %>
</script>

然后我使用以下coffeescript接受这个全局变量:

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

这适用于此页面,但我现在在未定义d_data的所有页面上抛出错误。另外,我在mysite.com/district_data上提供了这些json文件,并且正在考虑使用.get从ajax引入数据(并让视图快速加载),但我仍然需要在那里使用@district参数。

我知道我可以将js渲染为部分,并且除非我能找到一种方法使这个coffeescript有效,否则我会这样做。

任何想法都赞赏。

此致

1 个答案:

答案 0 :(得分:1)

为什么不检查数据是否已定义?

$(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
    )