Javascript 刷新嵌入式Ruby提供的HTML内容,而无需重新加载页面

Javascript 刷新嵌入式Ruby提供的HTML内容,而无需重新加载页面,javascript,html,ruby-on-rails,renderpartial,Javascript,Html,Ruby On Rails,Renderpartial,我很难找到解决这个问题的办法。基本上,我有一个嵌入的ruby-each循环,它的主体是为模型的某个子组渲染的部分。例如: <li id="thing"> <% items.each do |i| %> <%= render :partial => 'item', :locals => {:i => i} %> <% end %> </li> 'item',:locals=>{:i=>i}%> 我

我很难找到解决这个问题的办法。基本上,我有一个嵌入的ruby-each循环,它的主体是为模型的某个子组渲染的部分。例如:

<li id="thing">
  <% items.each do |i| %>
    <%= render :partial => 'item', :locals => {:i => i} %>
  <% end %>
</li>
  • 'item',:locals=>{:i=>i}%>
  • 我想知道是否有一种方法可以使用jQuery、AJAX甚至rails(我确信每种方法都有一个可实现的解决方案供我使用,我对它们都感兴趣)来刷新项目列表。我希望能够做到这一点的原因是,目前,我已经实现了允许创建当前“项”或更新现有“项”的功能,而无需重新加载页面(在这两种情况下,只要单击按钮,表单就会出现在特定容器中),我希望在提交后,列表会自动更新为新的信息或新的“项目”。尝试刷新整个列表是更好的方法吗?或者有没有办法将新创建/更新的对象附加到部分(作为部分)客户端列表中

    我尝试了以下语句,但似乎无法避免在渲染时出现“undefined method”错误

    $(“#activeTab”).append(“'item',:locals=>{:i=>item.order(:created_at).last})%>”


    我认为这将是一个很好的解决方案,因为一旦页面被导航并返回,列表将再次加载。这只是在您仍在页面上时附加到静态列表。

    抓取您用来提交此新项目的任何内容(我称之为submit_按钮),然后使用jquery重新加载页面

    $(“#提交按钮”)。单击(函数(){


    添加到form_for:remote=>true

    您能大致包含ruby代码将产生的HTML吗?另外,列表、表单和表单处理逻辑是否都在同一页面上?此视图有一个与此视图所针对的模型关联的对象列表,因此我从另一个模型中获取此项的部分。部分包含这是一张上传的照片或视频,一些指标等。所以没有什么太复杂的。当单击相应的按钮时,表单会临时替换保存列表的容器,提交后,再次显示列表。我只使用jQuery.show()和.hide()方法。该表单是rails表单,因此我使用语法表单\u for…这是否提供了更好的想法?感谢您花时间:)很抱歉,现在是凌晨3:45,所以我的大脑还没有足够的信息来全面描述情况。据我所知,我们的浏览器中有一个html页面,服务器能够输出html并响应ajax请求。对不起,也许我知道得太少(真的什么都不知道)关于Ruby有任何帮助。不用担心,已经谢谢Peter了!我只知道html页面中嵌入的Ruby会在页面完全加载之前得到评估,并且可能需要另一个请求。我只是希望可以通过附加另一个呈现语句来访问新创建的对象,如:
    $(“#activeTab”)。append(“'item',:locals=>{:i=>item.order(:created_at.last})%%>”;
    取而代之,因为我还不太熟悉AJAX。我会立即重新加载环绕在每个循环周围的div吗?我最后的评论措辞很糟糕:我会做类似:
    $(#thing.reload()的事情吗?)
    ?使用这种方法会出现一个未捕获的类型错误。它表示对象没有方法重载。对于方法重载(),我应该查看哪些文档?错误具体说明如下:
    未捕获的类型错误:对象[object object]没有方法“重载”
    。我使用的代码是
    $(“#list”).reload()
    。这个reload()方法应该通过调用服务器来重新评估嵌入的ruby each循环吗?我问这个问题是因为我知道嵌入的ruby是在服务器端计算的。$(“#submit_按钮”)。单击(function(){location.reload();});location.reload部分将在单击顶部后重新加载页面,因此如果您有“提交”按钮,则单击该按钮即可执行location.reload()操作,因此您需要在第一部分抓取表单
              location.reload();
    
    });