这是rails中的应用程序。
这就是我在'路线'中所拥有的:
resources :destinations
以下是'destinations_controller'中的内容:
def show
@destination = Destination.find(params[:id])
end
以下是我在'views / destinations / show.html.erb'中的内容:
<h2><%= @destination.latitude %></h2>
<script>
var dest_lat = <%= @destination.latitude %>
</script>
以下是我在'application.js'中的内容:
var dest_location = {dest_lat};
这是我第三次构建这个应用程序。最初,我没有错误,所有编码工作正常...几个小时。然后,在没有我改变任何东西的情况下,@ destination.latitude中的值仍然出现在h2标签中,但我开始收到错误:
Uncaught ReferenceError: dest_lat is not defined
带有显示其在'application.js'中使用的链接,该应用程序停止工作。
为什么?
感谢任何帮助。
答案 0 :(得分:2)
这不打印对Javascript有用的东西:
<script>
var dest_lat = <%= @destination.latitude %>
</script>
请尝试将其更改为:
<script>
var dest_lat = '<%= @destination.latitude %>';
</script>
在这里你可以看到引号有所不同。
var dest_lat = some_value;
&#13;
var dest_lat = 'some_value';
console.log(dest_lat);
&#13;
更新:要在您的application.js中提供您的数据,您可以使用content_tag将它们存储在不可见的div中,该content_tag将满足您的@destination.latitude
以及您需要工作的任何其他内容
# your_view.html.erb
<%= content_tag :div, class: 'destination_latitude', data: {destination_latitude: @destination.latitude} do %>
<% end %>
然后您可以将它们作为Javascript对象访问:
document.addEventListener('DOMContentLoaded', function(e) {
console.log($('.destination_latitude').data('destination-latitude'));
});
答案 1 :(得分:1)
检查渲染的HTML输出。正如我在评论中所说,我猜测在带有嵌入式javascript的脚本标记之前,正在调用src指向您的javascript文件的脚本标记。修复只是更改它们在页面上声明的顺序,但具体取决于您的布局,页面和部分的设置方式(我从您发布的问题中无法分辨)。
完成所有操作后,您将拥有类似的内容:
<script type='text/javascript'>
// Your embedded script
</script>
<script src='/path/to/application.js' type='text/javascript'></script>
在渲染输出中。