更新:我刚刚找到了另一个线程,它解释了我为什么会遇到这个问题( Pass local rails variable to javascript to partial ),但它没有列出修复它的步骤(或者至少它跳过了太多我不知道该怎么做的步骤) .) 问题似乎是传递给局部变量的局部变量不再是加载 new.html.erb 时存在的局部变量,因为局部变量直到单击事件才被加载。有没有可能解决这个问题?谢谢。
原文:
我有一个与链接相关联的点击事件,该链接仅在某些时候有效,我不知道为什么。当单击链接而不重新加载页面时,它应该将部分渲染到我的 View 中。
这是我目前拥有的(不起作用):
comps_helper.rb:
def addRound(f)
render "add_round", f: f
end
comps/new.html.erb
<div id="add_round"></div>
<%= link_to "Add round", addRoundLink_path, remote: true %>
addRoundLink.js.erb
$("#add_round").html("<%=j addRound(f) %>");
什么工作:
注意:当我单击链接时,这是我在 javascript 控制台中看到的内容:
GET http//0.0.0.0:3000/addRoundLink 500(内部服务器错误)
jquery.js:8215
谢谢。
最佳答案
它不起作用,因为 f
仅存在于您的 Controller 操作的上下文中。
当用户单击您的链接时,会为您的 javascript 发出一个新的 HTTP 请求。处理此请求的 Controller Action 与呈现页面的 Action 不同,因此您需要设置 f
在此 Controller 操作中并将其作为本地传递给 addRoundLink.js.erb。
示例代码
f
由您的模型对象/实例决定。 在您的 Controller 中
def add_round
model = MyModel.find params[:id]
f = model.determine_f
render :partial => 'add_round', :locals => { :f => f }
end
在你的 new.html.erb
<%= link_to "Add Round", add_round_path(@model), :remote => true %>
关于ruby-on-rails - 将局部变量传递给在 View 加载后呈现的局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12376653/