我们的团队最近提出了一个最初的边缘案例问题,当用户从具有某种javascript呈现的页面(无论是Ajax,标签等)中单击浏览器的后退按钮时,将显示原始javascript.要重新创建,我们按照以下步骤操作:
之前的步骤将显示:
(function() {
$(".job_applications").html("<li class=\"job_posting_application\">\n
...
...
...
...
);
}).call(this);
Run Code Online (Sandbox Code Playgroud)
在一些命中或未命中的情况下,您不需要在返回上一页之前单击选项卡,但它仍然会呈现原始javascript.在一天结束时,似乎最后渲染的模板正在被缓存,这在浏览器的部分是正常的和预期的,但导致我认为是一个更大的问题.
Rails指南在" 布局和渲染 "部分中说明,特别是关于模板的MIME类型:
默认情况下,Rails将使用MIME内容类型text/html(或者如果使用:json选项则使用application/json,或者使用:xml选项的application/xml)来提供渲染操作的结果.
基于Rails默认值,我们的控制器的索引操作应该呈现我们的index.html.slim模板.但是,在拖尾服务器日志的同时对该页面进行非远程调用(例如,直接导航到浏览器中的页面)时,我们注意到它实际呈现index.js.coffee.下面是我们的控制器操作,请注意我们没有明确响应html或js格式,因为我们可能应该考虑此页面中的重叠功能:
def index
@company_id, @division_id, @job_posting_id = params[:company_id], params[:division_id], params[:job_posting_id]
# API requests are made here to instantiate @job_posting, et al.,
# but are not shown for brevity
authorize! :manage, @job_posting
@survey = @job_posting.survey
@job_applications = @job_posting.job_applications(sort_column, sort_direction)
end
Run Code Online (Sandbox Code Playgroud)
但是,在此设置下,index.html.slim 应基于Rails默认值进行渲染.添加respond_to块时,缓存似乎仍然有效,控制器可能不关心respond_to块的存在:
def index
...
...
respond_to do |format| …Run Code Online (Sandbox Code Playgroud)