[英]Rails 3: Instance variable inaccessible in .js.erb file
我正在尝试构建一个非常简单的页面,我需要为照片库生成一些动态JavaScript。 一些直觉上简单的东西,但我正在努力奋斗。 在我的控制器中,我正在构建一个Photo
列表@photos
,然后需要为我的photo.js.erb
文件中的每张照片迭代一些JavaScript。
但是,每当我到达我的.js.erb文件时, @photos
变量就变为零......我错过了什么?
controllers / photos_controller.rb文件:
class PhotosController < ApplicationController
layout "application_photos"
def category
@photos = ...(generates collection of Photos)...
end
end
views / photos / category.html.haml文件:
= content_for :head do
// @photos is still initialized at this point
= javascript_include_tag "photos"
// This partial only loads some more markup, it's inconsequential.
= render :partial => 'default_slideshow'
javascripts / photos.js.erb文件:
jQuery(function($){
// Throws NilClass error
<% puts 'Photos: ' + @photos %>
});
我知道这个问题已被问了十几次,但之前接受的答案都没有真正对我有用。 任何建议都非常感谢。
您需要向服务器发送js请求才能访问实例变量。 像这样的东西
$(function($){
$.ajax({
type: "get",
url: "..."
})
});
在views / photos / category.js.erb文件中:
alert("<%= j @photos %>")
或者你可以使用gon gem做同样的事情。
app/views/layouts/application.html.erb
<head>
<title>some title</title>
<%= include_gon %>
<!-- include your action js code -->
...
你在控制器的动作中放了这样的东西:
@your_int = 123
@your_array = [1,2]
@your_hash = {'a' => 1, 'b' => 2}
gon.your_int = @your_int
gon.your_other_int = 345 + gon.your_int
gon.your_array = @your_array
gon.your_array << gon.your_int
gon.your_hash = @your_hash
gon.all_variables # > {:your_int => 123, :your_other_int => 468, :your_array => [1, 2, 123], :your_hash => {'a' => 1, 'b' => 2}}
gon.your_array # > [1, 2, 123]
gon.clear # gon.all_variables now is {}
从JavaScript文件中访问变量:
alert(gon.your_int)
alert(gon.your_other_int)
alert(gon.your_array)
alert(gon.your_hash)
希望这可以帮助
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.