content_for:in_script中的脚本块不起作用

时间:2010-10-31 13:21:54

标签: ruby-on-rails

脚本块以$('#map#{shop.id}').....中的content_for :in_script开头不起作用。

def edit_country_fields_template(city, shop)
  content_tag(:div, :class => "item") do
    "<div id='map#{shop.id}' class='map'></div>".html_safe +
   if shop.geocoded?
         content_for :in_script do
           $('#map#{shop.id}').gMap({ markers: [{ latitude: #{spot.lat},
     longitude: #{shop.lng},
     html: '_latlng' },
     { address: '#{shop.address_geo}',
       html: '#{shop.name}<br/><a href='http://maps.google.com/maps?q=#{shop.address_geo}' target='_blank'>See Full Map</a>' },
      ],
      zoom: 16 });
          end
       end
  end
end

我在edit.html.erb <%= edit_country_fields_template %>视图中调用了此助手。但是我有问题,下面的脚本代码在视图文件的脚本中添加内联:

$('#map#{shop.id}').gMap({ markers: [{ latitude: #{spot.lat},
     longitude: #{shop.lng},
     html: '_latlng' },
     { address: '#{shop.address_geo}',
       html: '#{shop.name}<br/><a href='http://maps.google.com/maps?q=#{shop.address_geo}' target='_blank'>See Full Map</a>' },
      ],
      zoom: 16 });

最终结果是if shop.geocodedtrue,上面的脚本代码将在我的视图中显示为内联脚本:

<script type="text/javascript">
$(document).ready(function(){
    $('#map1').gMap({ markers: [{ latitude: -1.030503,
     longitude: 1.340594,
     html: '_latlng' },
     { address: '200 Good Street, California, United States of America',
       html: 'California Restaurant<br/><a href='http://maps.google.com/maps?q=200 Good Street, California, United States of America' target='_blank'>See Full Map</a>' },
      ],
      zoom: 16 });
    });

感谢。

1 个答案:

答案 0 :(得分:0)

content_for不输出任何内容,但将HTML存储在缓冲区中以供在其他地方使用(例如页面的页眉或页脚)。

在您的视图中或部分:

content_for :my_script do
  "abc"
end

然后在你的布局中:

yield :my_script

如果没有yield,您的content_for将不会显示。