- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在尝试将 JSON 数据解析为 Rails 时遇到了困难。
无论如何,我正在尝试创建标记并将其显示到谷歌地图中,但我不断收到以下语法错误
syntax error, unexpected ')'
...e_javascript raw '@job_json' -).to_s); _erbout.concat "\";\n"
map.js.erb
$(document).ready(function() {
var mapEl = $('#map');
var optimized = !mapEl.data('test-env');
handler = Gmaps.build('Google');
handler.buildMap({
provider: {
disableDefaultUI: false
},
internal: {
id: 'map'
}
},
function() {
var jobJSON = "<%= escape_javascript raw @job_json -%>"; // ERROR MESSAGE HERE
markers = handler.addMarkers([
{
// "lat": 50.827016,
// "lng": 4.372516,
"address": 'job.location', // data I want to display on the map
}
], { optimized: optimized }); // true or false
handler.bounds.extendWith(markers);
handler.map.centerOn({
lat: 50.1351162,
lng: 2.8922343
});
handler.getMap().setZoom(6);
if(!optimized) {
// Add container for the markers for easy iteration
// by doing $("#markers img").
var myOverlay = new google.maps.OverlayView();
myOverlay.draw = function () {
this.getPanes().markerLayer.id = 'markers';
};
myOverlay.setMap(handler.getMap());
}
});
});
代码JobsController
class JobsController < ApplicationController
before_action :set_job, only: [:edit, :update]
def index
@user = User.find(params[:user_id])
@jobs = Job.all
# @jobs = current_user.jobs.all
end
def show
@user = User.find(params[:user_id])
@job = Job.find(params[:id])
@job_json = @job.to_json(only: [:location, :title, :id])
end
def new
@jobs = Job.new
end
def create
@user = User.find(params[:user_id])
@job = current_user.jobs.build(job_params)
@job.user = current_user
respond_to do |format|
if @job.save
format.html { redirect_to @job, success: 'Job wiki was created!' }
format.json { render json: @job, status: :created, location: @job }
format.js
else
format.html { render action: 'new' }
format.json { render json: @job.errors, status: :unprocessable_entity }
format.js
end
end
end
...
最佳答案
Assets 管道中的文件(即 app/assets
文件夹中)无法像 View 那样访问 Controller 中定义的实例变量。这就是您收到错误的原因。您必须找到其他方法将 @job_json
从 Rails 转换为 JavaScript。
由于您只想获取有关单个作业的信息,因此您可以考虑将其作为数据属性包含在页面中的某个位置,如下所示:
show.html.erb
...
<div id='map' data-job='<%= @job_json %>'>
</div>
...
maps.js.erb
...
var jobJSON = $('#map').data('job');
...
显然,如果您需要将大量记录传输到 JavaScript,则这不会很好地工作,因为它需要大量数据属性(或一个很长的属性)。在这种情况下,AJAX 可能会更好地为您服务。但对于只有一条记录,此方法效果很好。
您还可以考虑查看 Gon gem,它使您的 Ruby 变量可用于您的 JavaScript Assets 。
<小时/>我已经浏览了您的申请,Google Maps for Rails README以及整个网络,并找到了一种可能适合您的方法,因为您要同时显示许多职位。我自己在您的代码中实现了它,虽然它可能需要一些调整才能达到您喜欢的方式,但它是实用的。
Geocoder gem 与 Google Maps for Rails 完美搭配,因为它将地址或地名转换为坐标。 Google Maps for Rails 过去曾经单独拥有此功能,但在某个时候它 forfeited the responsibility .
Gemfile
...
gem 'geocoder'
...
控制台
$ bundle install
$ rails generate migration AddLatitudeAndLongitudeToJobs latitude:float longitude:float
$ rake db:migrate
作业.rb
class Job < ActiveRecord::Base
geocoded_by :location
...
after_validation :geocode
end
jobs
表现在有纬度和经度列,但它们是空的。获取 after_validation :geocode
回调来填充它们的最快方法是用干净的数据库覆盖当前数据并重新播种。您可能需要先修复 seeds.rb
中的种子代码;它给了我一个缺少逗号和无效日期时间的错误。
控制台
$ rake db:schema:load
$ rake db:seed
show
页面上运行jobs_controller.rb
def show
@user = User.find(params[:user_id])
@job = Job.find(params[:id])
@hash = Gmaps4rails.build_markers(@job) do |job, marker|
marker.lat job.latitude
marker.lng job.longitude
marker.infowindow job.location
end
end
在 JavaScript 中,将 $(document).ready
执行函数替换为可调用函数...
maps.js.erb
function drawMap(mapId, marker_json) {
var mapEl = $('#' + mapId);
var optimized = !mapEl.data('test-env');
handler = Gmaps.build('Google');
handler.buildMap(
{
provider: {
disableDefaultUI: false
},
internal: {
id: 'map'
}
},
function() {
markers = handler.addMarkers(
marker_json,
{ optimized: optimized } // true or false
);
handler.bounds.extendWith(markers);
handler.fitMapToBounds();
if (!optimized) {
// Add container for the markers for easy iteration
// by doing $('#markers img').
var myOverlay = new google.maps.OverlayView();
myOverlay.draw = function () {
this.getPanes().markerLayer.id = 'markers';
};
myOverlay.setMap(handler.getMap());
}
});
}
...然后从您的 View 中调用它,您可以在其中访问 Controller 的实例变量。
show.html.erb
<script type='text/javascript'>
function initialize() {
drawMap('map', <%= raw @hash.to_json %>);
}
google.maps.event.addDomListener(window, 'load', initialize);
</script>
...
show
页面上运行这与步骤 3 基本相同,但有多个作业。
users_controller.rb
...
def show
@user = User.find(params[:id])
@jobs = @user.jobs
@hash = Gmaps4rails.build_markers(@jobs) do |job, marker|
marker.lat job.latitude
marker.lng job.longitude
marker.infowindow job.location
end
end
...
show.html.erb
<script type='text/javascript'>
function initialize() {
drawMap('map', <%= raw @hash.to_json %>);
}
google.maps.event.addDomListener(window, 'load', initialize);
</script>
...
希望这对您有帮助。正如我提到的,当我尝试时它起作用了,而且我相信我涵盖了我更改的所有内容......
关于javascript - 将模型数据嵌入到 Rails 4 中的 JavaScript 变量中时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33852428/
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: How to nest OR statements in JavaScript? 有没有办法做到这一点:
在 JavaScript 中有没有办法让一个变量总是等于一个变量?喜欢var1 = var2但是当var2更新,也是var1 . 例子 var var1 = document.getElementBy
我正在努力理解这代表什么 var1 = var2 == var3 我的猜测是这等同于: if (var2 == var3): var1 = var2 最佳答案 赋值 var1 = var2
这个问题已经有答案了: What does the PHP error message "Notice: Use of undefined constant" mean? (2 个回答) 已关闭 8
我在临时表中有几条记录,我想从每条记录中获取一个值并将其添加到一个变量中,例如 color | caption -------------------------------- re
如何将字符串转为变量(字符串变量--> $variable)? 或者用逗号分隔的变量列表然后转换为实际变量。 我有 2 个文件: 列名文件 行文件 我需要根据字符串匹配行文件中的整行,并根据列名文件命
我有一个我无法解决的基本 php 问题,我也想了解为什么! $upperValueCB = 10; $passNodeMatrixSource = 'CB'; $topValue= '$uppe
这可能吗? php $variable = $variable1 || $variable2? 如果 $variable1 为空则使用 $variable2 是否存在类似的东西? 最佳答案 PHP 5
在 Perl 5.20 中,for 循环似乎能够修改模块作用域的变量,但不能修改父作用域中的词法变量。 #!/usr/bin/env perl use strict; use warnings; ou
为什么这不起作用: var variable; variable = variable.concat(variable2); $('#lunk').append(variable) 我无法弄清楚这一点
根据我的理解,在32位机器上,指针的sizeof是32位(4字节),而在64位机器上,它是8字节。无论它们指向什么数据类型,它们都有固定的大小。我的计算机在 64 位上运行,但是当我打印包含 * 的大
例如: int a = 10; a += 1.5; 这运行得很完美,但是 a = a+1.5; 此作业表示类型不匹配:无法从 double 转换为 int。所以我的问题是:+= 运算符 和= 运算符
您好,我写了这个 MySQL 存储过程,但我一直收到这个语法错误 #1064 - You have an error in your SQL syntax; check the manual that
我试图在我的场景中显示特定的奖牌,这取决于你的高分是基于关卡的目标。 // Get Medal Colour if levelHighscore goalScore { sc
我必须维护相当古老的 Visual C++ 源代码的大型代码库。我发现代码如下: bIsOk = !!m_ptr->isOpen(some Parameters) bIsOk的数据类型是bool,is
我有一个从 MySQL 数据库中提取的动态产品列表。在 list 上有一个立即联系 按钮,我正在使用一个 jquery Modal 脚本,它会弹出一个表单。 我的问题是尝试将产品信息变量传递给该弹出窗
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: What is the difference between (type)value and type(va
jQuery Core Style Guidelines建议两种不同的方法来检查变量是否已定义。 全局变量:typeof variable === "undefined" 局部变量:variable
这个问题已经有答案了: 已关闭11 年前。 Possible Duplicate: “Variable” Variables in Javascript? 我想肯定有一种方法可以在 JavaScrip
在语句中使用多重赋值有什么优点或缺点吗?在简单的例子中 var1 = var2 = true; 赋值是从右到左的(我相信 C# 中的所有赋值都是如此,而且可能是 Java,尽管我没有检查后者)。但是,
我是一名优秀的程序员,十分优秀!