0

我有一个 index.htm.erb 文件,其中包含一个渲染模板文件。

<div id="product"> <%= render :template => "shop/products" %> </div>

在它的控制器中我有

  def index
    @products = Product.paginate :page => params[:page], :per_page => 6 
  end

我的 index.html 文件底部有一个 js 文件,其中有一个用于获取 will_paginate url 的脚本。

$(window).scroll(function(){
        if( $(this).scrollTop() > ( ( $(document).height() - $(this).height() ) - 50 ) ){
            var link = $('.pagination .next_page').attr('href');
            $.getScript( link );
        }


        });

此 getScript 调用与 index.html.erb 同名的 js 文件。所以它的 index.js.erb。在 js.erb 文件中,我有一个

console.log("products = ", @products);

尝试检索实例变量时出现错误。500 内部服务器错误 我无权访问@products 变量。我需要做什么才能访问此变量。

更新:

我正在使用来自http://railscasts.com/episodes/114-endless-page-revised?autoplay=true
的相同教程, 唯一的区别是我在 index.html.erb 中使用模板所以我仍然不'不明白在教程中他们如何访问实例变量,但我不明白

4

2 回答 2

1

忽略答案

我不是一个大 RoR 人,所以我可能会误解这种情况,但我仍然想尝试帮助你。这是我的猜测:

这并不是真正的 RoR 相关,而是一般来说更多的是后端到前端的问题。JavaScript 完全在浏览器中运行,而 Rails 仅在服务器上运行。因此,JS 不知道您在 Ruby 环境中定义的所有变量。如果您希望在 JS 中可以访问变量,则必须以某种方式将其写入页面。

简单地举个例子,你需要做一些事情:

<script>
    var productName = "<%= @product.name %>";
</script>

所以 Rails 将解析 html 并用<%= @product.name %>实际名称替换部分。所以浏览器检索到一个看起来像这样的 html

<script>
    var productName = "Ice Cream";
</script>

这是一种非常简单的方式,您可以将变量从后端传递到前端。

于 2012-12-11T04:00:12.910 回答
0

尝试将@products变量显式传递给您的模板:

<%= render :template => "shop/products", :locals => {:my_products => @products} %>

my_products然后,您shop/products可以在当前使用的任何地方使用模板中的变量@products

于 2014-12-09T14:06:49.163 回答