gpt4 book ai didi

ruby-on-rails - 一旦启用 Action 缓存,format.js 就不会操作 dom

转载 作者:行者123 更新时间:2023-12-04 02:15:32 25 4
gpt4 key购买 nike

注意:我在这里展示了我正在做的事情的逻辑。
我在做什么:
想想我们列出产品和分页的基本索引操作。现在使用 remote-true 选项我启用了基于 ajax 的分页。到目前为止,一切正常。查看示例代码。
产品 Controller :

 def index
@products = Product.paginate(:order =>"name ASC" ,:page => params[:page], :per_page => 14)
respond_to do |format|
format.html # index.html.erb
format.json { render json: @products }
format.js
end
end
索引.html.erb
<h1>Products</h1>
<div id="products">
<%= render "products/products" %> // products partial is just basic html rendering
</div>

<script>
$(function(){
$('.pagination a').attr('data-remote', 'true')
});
</script>
索引.js.erb
  jQuery('#products').html("<%= escape_javascript (render :partial => 'products/products' ) %>");
$('.pagination a').attr('data-remote', 'true');
那么问题来了:
现在我想为此启用 Action 缓存。但是 index.js.erb 文件并没有操作 DOM。如果我删除了 remote-true 功能,那么缓存可以正常工作。
对于 Action 缓存,我在 Controller 顶部添加了这一行:
 caches_action :index, :cache_path => Proc.new { |c| c.params }
有什么建议?
更新:
问题是 jquery 代码没有执行。来自 this
我发现出了什么问题。 jQuery 实际上用 包围了传入的脚本,以便浏览器评估传入的代码。但是缓存机制只是将代码保存为文本,当再次请求时,它以文本形式返回代码但不对其进行评估。因此,需要明确地评估代码
但是这个问题怎么解决呢??

最佳答案

我不明白使用 remote: true 应该有什么问题.其他人建议使用 .ajax而不是 remote: true ,但这正是远程功能所做的,所以应该没有任何区别。

另一个答案的代码明确使用 jQuery.ajax ,但与远程功能所做的相比,他们的代码的唯一区别是他们指定了显式 dataType .你实际上可以用 remote: true 做到这一点尽管。

在您的 HTML 链接中,您只需要指定 data-type="script" .或者,根据您发布的 JS,您可以这样做:

$(function(){
$('.pagination a').attr('data-remote', 'true').attr('data-type', 'script');
});

编辑:另外,我在这里更深入地写了关于数据类型属性以及它如何与 Rails 一起工作的文章: http://www.alfajango.com/blog/rails-3-remote-links-and-forms-data-type-with-jquery/

关于ruby-on-rails - 一旦启用 Action 缓存,format.js 就不会操作 dom,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13635548/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com