来自不同页面的响应有多少共同点?显然,JS 响应调用不会返回 html 响应将返回的内容。您可能知道,JS 版本应该只更新需要更新的部分,而 html 版本应该更新整个页面。
如果所有 html 响应中的大多数都相似/所有 js 响应都相似,那么您应该将未出现在所有响应中的位分解为部分响应。您可以通过在链接中传递一个额外的参数来切换它们的显示。
我更喜欢局部视图,条件是是否渲染它们,但没有理由不能做局部 RJS。我还没有测试过,但是看到 RJS 文件只是直接的 ruby 代码,你应该能够要求另一个 RJS 文件来像部分一样包含它。
你需要知道的代码才能让它工作:
向链接添加额外参数:
老式的方式:
<%= link_to_remote "I am a remote link", :url => {:controller => controller, :action => action, :id => @whatever, :last_action => params[:action] } %>
宁静之道:
<%= link_to_remote "I am a remote link", controller_url(@whatever, :last_action => params[:action])%>
RJS 代码
page.replace_html :only_replaced_from_edit, :partial => 'was_edit' if params[:last_action] == "edit"
page.replace_html :only_replaced_from_index, :partial => 'was_index' if params[:last_action] == "index"
page.replace_html :not_replaced_from_edit, :partial => 'wasnt_edit' unless params[:last_action] == "edit"
常规的 html 请求也是如此。抽象为常见/独特的部分并根据参数加载它们。应该更简单,因为您不必担心不存在的元素。