1

我有一个评级控制器,其创建操作通过 Javascript 调用。我的评级文件夹中有一个 create.js 文件。我认为为了调用 create.js 文件,您需要这样的东西

respond_to do |format|
    format.js
end

但是,当我删除它时,仍然会调用 create.js 文件。这是因为 create.js 在 create 操作中被调用(即方法的名称和 .js 文件匹配)吗?谢谢!

更新:当 format.js 丢失时,它无法找到 DOM 的元素。例如,如果我有类似的东西

$('#id_3').html('<%=escape_javascript render(:partial => 'show') %>');

正如我在终端中看到的那样,部分“显示”被执行,但它找不到 div“id_3”,因此部分永远不会出现在 DOM 中。任何澄清将不胜感激,谢谢

4

2 回答 2

2

轨道魔法!如果指向您的资源的链接类似于 /dogs/1.js,那么 respond_to 会按照您的想象处理它。尝试调用 /dogs/1 看看会发生什么。还有效吗?现在尝试在 format.js 之前添加 format.html。这应该让您对 respond_to 的工作原理有一个很好的了解。

于 2012-05-20T16:58:35.787 回答
1

这就是 Rails 的工作方式:它呈现与操作同名的视图。

如果您有多个具有相同名称(不同格式)的视图,则必须在请求中指定您想要的视图并使用该respond_to方法进行相应的响应:

def index
  respond_to do |format|
    format.js { ... }
    format.html { ... }
    ...
  end
end

GET /index.html将呈现 index.html.erb 文件(假设您使用的是 ERB)

GET /index.js将呈现 index.js.erb 文件

于 2012-06-04T16:48:48.093 回答