Cat*_*ish 2 ruby ruby-on-rails ruby-on-rails-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
Run Code Online (Sandbox Code Playgroud)
这将呈现此.js.erb文件
console.log('name = '+<%= escape_javascript @curr_app_field_name %>); // line 1
console.log('test'); // line 2
Run Code Online (Sandbox Code Playgroud)
但是当我将实例变量留在那里时,我没有在firebug中获得任何输出.我可以在post请求中看到console.logs使用正确的字段名称生成,但firebug控制台中没有任何内容.
如果我完全删除第1行,它的工作原理.
我怎么能这样做,所以我可以访问.js.erb文件中的一些变量?
你错误地混合了Javascript和Ruby.
代替:
console.log('name = '+<%= escape_javascript @curr_app_field_name %>);
Run Code Online (Sandbox Code Playgroud)
你必须这样做:
console.log('name = <%= escape_javascript @curr_app_field_name %>');
Run Code Online (Sandbox Code Playgroud)
说明:
假设@curr_app_field_name == 'foo'您当前的代码将评估为:
console.log('name = '+foo);
Run Code Online (Sandbox Code Playgroud)
但变量foo不存在,因此会抛出错误.如果你这样做,我建议它将评估为:
console.log('name = foo');
Run Code Online (Sandbox Code Playgroud)
一切都会按预期工作.
| 归档时间: |
|
| 查看次数: |
4425 次 |
| 最近记录: |