通过一个局部变量来在所述视图后呈现的局部已加载(Passing a local variable t

2019-07-31 12:35发布

更新:我刚刚发现这个其他线程这可以解释为什么我有这个问题( 通过本地轨变量javascript来部分 ),但它并没有列出的步骤来解决它(或至少它跳过步骤太多,我不要“T还不知道该怎么办。)这个问题似乎是局部变量被传递到部分不再当new.html.erb加载由于部分未加载,直到click事件存在的相同的局部变量。 是否有可能得到解决了吗? 谢谢。

原版的:

我绑一个链接,只能在某些时候click事件,我不知道为什么。 它应该呈现局部到我的观点时,点击一个链接,而不重新加载页面。

这是我目前有(没有工作):

comps_helper.rb:

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

谱曲/ 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) %>");

什么工作:

  1. 如果我只是直接调用辅助方法从new.html.erb与<%= addRound%>,它的工作原理。 但我需要它来当点击该链接,使用户可以尽可能多的部分添加到窗体,因为他们想被触发。

  2. 如果“F”参数在上面的代码包含的JavaScript并点击上工作。 例如,如果我改变部分,因此只包括文本字符串,它会被点击链接时呈现的文本。 这让我觉得有一个与我怎么包含在JavaScript中的“F”参数的问题。 但我不知道为什么是这样的话,因为不只是将代码回到new.html.erb在那里我与“add_round” ID的DIV的JavaScript?

注:这是我在我的JavaScript控制台,当我点击链接:GET HTTP //0.0.0.0:3000/addRoundLink 500(内部服务器错误)
的jquery.js:8215

谢谢。

Answer 1:

它不工作,因为f只有在你的控制器动作的情况下存在。

当用户点击你的链接,一个新的HTTP请求的是你的JavaScript制成。 控制器动作处理这个请求来自呈现在页面的不同,所以你需要设置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 %>


文章来源: Passing a local variable to a partial that is rendered after the view has already loaded