0

我有一个场景,在编辑操作中,我需要渲染 edit.html.erb 以及触发 edit.js.erb 文件。现在我有

      def edit
    @page_id = params[:id]
    respond_to do |format|
    format.html
    format.js
    end
  end

但只有视图在渲染,但我的 edit.js.erb 仍然没有触发。

4

3 回答 3

0

用js响应并在下面编写代码:

编辑.js.erb

$('body').html('<%=j render "edit" %>');
于 2012-08-17T09:55:12.283 回答
0

你对它所做的事情的印象是错误的。

如果您希望 javascript 运行,那么您的 edit.html.erb 文件需要包含:

<%= javascript_include_tag "jsfilename" %>

并将您的 javascript 存储在 public/javascripts/jsfilename 或类似位置(public/assets/javascripts/

对 format.html、format.js 的响应用于请求该格式的视图。

例如。如果我浏览到 edit.html,它会显示 html.erb 视图,如果我浏览到 edit.js,它会显示 js.erb 视图。该功能使您可以请求不同文件格式的相同内容,而不是向您的网页添加 javascript 功能。

于 2012-08-17T09:58:14.640 回答
0

使用这两种分析器,您都可以使其正常工作,但您不遵循约定。edit.js 用于 Ajax 调用。

您似乎在做的是使用部分来构建您的页面。那么你真的应该遵循命名约定(以_开头的文件名)以便其他程序员清楚。

其次,您始终需要确保您的网站可以在没有 javascript 的情况下运行,因此您的编辑页面永远不需要任何 Javascript 才能运行。javascript 是对改善用户体验的补充(例如使用 ajax 进行编辑而无需页面刷新)。

总结: - 将“必需的”javascript 代码移至您的 edit.html.erb。- 如果 Ajax 被激活,只使用 edit.js.coffee 来处理现有网页的更新,使用来自 edit.html.erb 的尽可能多的 js。- 将共享代码的其余部分放入部分中,例如 _niceedit.js.coffee 并使用 'render :partial=>' 渲染它...

遵循约定,它将在以后和使用测试服务等时为您提供帮助。

于 2012-08-17T11:19:19.197 回答