将局部变量传递给已加载视图后呈现的局部变量

更新:我刚刚发现这个其他线程解释了为什么我遇到这个问题(将本地rails变量传递给javascript到部分 ),但它没有列出修复它的步骤(或者至少它跳过了太多的步骤,我不知道我还不知道怎么办。)问题似乎是传递给partial的局部变量不再是加载new.html.erb时存在的同一局部变量,因为在click事件之前没有加载partial 。 有可能解决这个问题吗? 谢谢。

原版的:

我有一个点击事件绑定到一个链接只能在某些时间工作,我不知道为什么。 在没有重新加载页面的情况下单击链接时,应该将部分渲染到我的视图中。

这是我目前拥有的(不起作用):

comps_helper.rb:

def addRound(f) render "add_round", f: f end 

谱曲/ new.html.erb

 

addRoundLink.js.erb

 $("#add_round").html(""); 

什么工作:

  1. 如果我直接使用从new.html.erb调用helper方法,它就可以工作。 但是我需要在单击链接时触发它,以便用户可以根据需要向表单添加任意数量的部分。

  2. 如果上面的代码中没有包含’f’参数,那么javascript确实可以用于点击。 例如,如果我更改局部因此它只包含一个文本字符串,它将在单击链接时呈现该文本。 这让我觉得我在javascript中包含’f’参数的方式存在问题。 但是我不确定为什么会这样,因为不是javascript只是将代码插回到new.html.erb中,其中我的div有“add_round”id?

注意:这是我在单击链接时在javascript控制台中看到的内容:GET http //0.0.0.0:3000/addRoundLink 500(内部服务器错误)
的jquery.js:8215

谢谢。

它不起作用,因为f仅存在于控制器操作的上下文中。

当用户点击您的链接时,会为您的javascript发出新的HTTP请求。 处理此请求的控制器操作与呈现页面的操作不同,因此您需要在此控制器操作中设置f并将其作为本地传递给addRoundLink.js.erb。

示例代码

  • 我假设f由您的模型对象/实例确定。

在你的控制器中

  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 %>