3

我正在发出 ajax 请求,完成后我正在尝试向页面添加 div。出于某种原因,我无法让实例变量在 .js.erb 文件中工作。

我有这个被调用的控制器方法

 # PUT /applications/1
  # PUT /applications/1.json
  def update
    @application = Application.find(params[:id])
    @current_app = params[:application]
    @curr_app_id = params[:id]
    @current_app.values.each do |key, val|
        key.values.each do |k,v|
            @curr_app_field_name = k[:field_name]
            @curr_app_field_value = k[:field_type]
        end
    end

    respond_to do |format|
      if @application.update_attributes(params[:application])
        format.html { redirect_to @application, notice: 'Application was successfully updated.' }
        format.json { head :no_content }
        format.js
      else
        format.html { render action: "edit" }
        format.json { render json: @application.errors, status: :unprocessable_entity }
        format.js
      end
    end
  end

呈现这个 .js.erb 文件

console.log('name = '+<%= escape_javascript @curr_app_field_name %>); // line 1
console.log('test'); // line 2

但是当我将实例变量留在那里时,我在萤火虫中没有得到任何输出。我可以在发布请求中看到使用正确的字段名称生成了 console.logs,但在 firebug 控制台中没有出现任何内容。

如果我完全删除第 1 行,它可以工作。

我怎样才能做到这一点,以便我可以访问 .js.erb 文件中的一些变量?

4

2 回答 2

6

您错误地混合了 Javascript 和 Ruby。

代替:

console.log('name = '+<%= escape_javascript @curr_app_field_name %>);

你必须这样做:

console.log('name = <%= escape_javascript @curr_app_field_name %>');

解释:

假设@curr_app_field_name == 'foo'您当前的代码将评估为:

console.log('name = '+foo);

但变量 foo 不存在,因此会引发错误。如果您像我建议的那样这样做,它将评估为:

console.log('name = foo');

一切都会按预期进行。

于 2012-12-07T06:38:05.163 回答
0

我认为你必须添加这样的引号:

console.log('name = '+ "<%= escape_javascript @curr_app_field_name %>");

但如果只是你在firebug中可能有错误。

于 2012-12-07T06:41:47.757 回答