Звездочки неправильно обрабатывают erb в файле js - PullRequest
1 голос
/ 01 августа 2011

У меня есть простой вызов API gmaps V3 для создания статической карты, основанной на широте / долготе в записи местоположения.файл повторно появляется в директории 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..."
  });
}

Я получаю синтаксическую ошибку синтаксического анализа во встроенном коде erb.обратите внимание, что у меня есть другие динамические карты, созданные на основе API V3, которые работают нормально, так что это проблема def со встроенной оценкой erb .... также обратите внимание, что я пробовал расширение имени файла как .js.erb в предположении, что яимел неправильный порядок обработки, но это привело к неопределенной ошибке метода для 'широты', так как он попал в первую строку кода erb ....

также обратите внимание, что в сгенерированном приложении произошла ошибка анализа.js файл

любой ввод оценен .....

1 Ответ

4 голосов
/ 01 августа 2011

Насколько я понимаю, когда вы выпускаете этот код в производство, вы «скомпилируете» все свои js-ресурсы в один файл application.js - в это время будет выполняться оценка erb и НИКОГДА снова. В разработке это не проблема, так как application.js компилируется при каждом запросе. Просматривая ваш код, я предполагаю, что вы хотите, чтобы значения @location менялись при каждом запросе, ваш текущий подход не сработает.

Что касается ошибок, которые вы получаете, это ошибка разбора sprokets или ошибка JavaScript на стороне клиента? угадывает, @location ноль, когда js.erb обрабатывается?

Возможно, вы захотите обернуть этот код в повторно используемую функцию / объект javascriopt и затем установить переменные экземпляра в представлении при вызове кода на стороне клиента? Этот звонок может выглядеть примерно так

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

с этим кодом в самом представлении, erb будет переоцениваться при каждом запросе, даже в рабочем состоянии

...