【问题标题】:How can I pass to Ruby obj to Javascript?如何将 Ruby 对象传递给 Javascript?
【发布时间】:2010-01-08 14:17:30
【问题描述】:

我有这个可以调用choose_category:

{ :action => :choose_category, :id => 类别 } 做 %>

我有这个方法来调用choose_category.js.rjs:

  def choose_category
    begin
      category               = Category.find(params[:id]) 
    rescue 
      ActiveRecord::RecordNotFound
      logger.error("Attempt to access invalid product #{params[:id]}") 
      # flash[:notice]      = "Invalid product" 
      redirect_to :action   => :index
    else
      respond_to { |format| format.js }    
      # redirect_to_index
    end
  end

我想回调类别名称,我该怎么做?我试试这个,但它对我没有任何回报。

page.alert(@category.name)

【问题讨论】:

    标签: javascript ruby-on-rails ruby


    【解决方案1】:

    您的问题是您的 RJS 模板中未定义 @category。

    RJS 文件本质上是生成 Javascript 的视图。与视图一样,它们可以访问控制器中设置的实例变量,但不能访问局部变量。

    将其放在操作的开始部分应该可以解决您的问题。

    @category               = Category.find(params[:id])
    

    【讨论】:

      【解决方案2】:

      我不确定这一点,因为我对 js 和 rjs 不是很熟悉,但我会在你的 rjs 中添加如下内容:

      category_name = <%= @category.name %>;
      

      然后

      page.alert(category_name)
      

      或者只是:

      page.alert(<%= @category.name %>)
      

      【讨论】:

        【解决方案3】:

        如果您可以编写自己的 JavaScript,为什么不使用 Ruby 的 to_json() 方法以 JSON 格式将对象输出到页面上的嵌入式常量,然后编写一些 JavaScript 来访问该变量并根据需要进行操作?

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-03-06
          • 2018-01-08
          • 2014-06-09
          • 1970-01-01
          • 2015-11-13
          • 2022-01-16
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多