注意:我在这里提出我正在做的逻辑。
我在做什么:
想想我们列出产品和分页的基本索引操作。现在使用 remote-true 选项,我启用了基于 ajax 的分页。到目前为止,一切都很好。看一下示例代码。
产品控制器:
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');
所以有什么问题:
现在我想对此启用动作缓存。但是 index.js.erb 文件并没有操作 DOM。如果我删除了 remote-true 功能,那么缓存就可以正常工作。
对于动作缓存,我在控制器顶部添加了这一行:
caches_action :index, :cache_path => Proc.new { |c| c.params }
有什么建议么?
更新:
问题是 jquery 代码没有执行。从这个问题
我发现出了什么问题。jQuery 实际上用 a 包围传入的脚本,以便浏览器评估传入的代码。但是缓存机制只是将代码保存为文本,当再次请求时,它会将代码作为文本返回,但不对其进行评估。因此,需要明确地评估代码
但是这个问题怎么解决??