链轮不能正确处理js文件中的动词

Sprockets not properly porcessing erb in js file

本文关键字:文件 js 不能 正确处理      更新时间:2023-09-26

我有一个简单的gmaps V3 api调用来根据位置记录中的经纬度生成静态地图。该文件保存在asset/javascripts目录中,命名为location_static_map.erb.js

代码如下:

var location;
function initialize() {
  var myOptions = {
    zoom: 10,
    mapTypeId: google.maps.MapTypeId.HYBRID
  };
  var map = new google.maps.Map(document.getElementById("location_static_map"), myOptions);
  var lat = <%= "#{@location.latitude}" %>;
  var lon = <%= "#{@location.longitude}" %>;
  location = lat,lon;
  map.setCenter(location);
  var marker = new google.maps.Marker({
    position: location,
    map: map,
    visible: true,
    draggable: false,
    title: "Your Location is Here..."
  });
}

我得到嵌入的动词代码语法解析错误。请注意,我有其他针对V3 api构建的动态映射,这些映射工作良好,因此这是嵌入式谓词评估....的一个问题还请注意,我已经尝试了文件扩展名为。js。假设我的处理顺序是错误的,但是这会导致'latitude'的未定义方法错误,因为它碰到了Erb代码的第一行....

还注意解析错误发生在生成的application.js文件

欢迎输入.....

这是我的理解,当你发布这段代码到生产中,你将'编译'你所有的js资产到一个单一的application.js文件-这个动词将被评估在那个时候,永远不会再。在开发中,这不是一个问题,因为application.js会针对每个请求进行编译。从你的代码来看,我假设你希望@location值随每个请求而改变,你目前的方法是行不通的。

就您收到的错误而言,是sprokets解析错误还是客户端javascript错误?猜测@location是nil,当js。Erb正在处理中?

你可能想把这段代码包装成一个可重用的javascript函数/对象,然后在调用客户端代码时在视图中设置实例变量?这个调用可以像这样

<script>
window.App.Locator.initialize('<%= @location.latitude %>', '<%= @location.longitude %>');
</script>

在视图中使用这段代码,即使在生产