0

在 Rails 3 中,假设我有以下代码:

控制器

...
format.js # create.js.erb
...

创建.js.erb

$('#element').html("new content");

查看表格

...
button_to 'Create', element, remote: true

我想知道文件中的 JS 是如何create.js.erb被调用的。我的猜测是它返回 JS 代码,并且一些 Rails 助手在收到它时调用它。这是正确的,还是这里有任何其他类型的魔法?

4

1 回答 1

1

编辑

简短回答:基本上,您的假设是正确的,它将返回随后将执行的 JS 代码。

稍微长一点的答案:不过,它背后有一些魔力。单击该按钮时,它将向创建 url 发出 JSON 请求,但改为请求格式“js”。

然后,控制器知道预期的格式是“js”,并且在运行create操作之后,将呈现该格式的模板 -- create.js.erb

:remote => true由于该选项,Rails 知道它应该执行此自定义 JSON 请求。它将data-remote=true属性添加到链接元素。

rails.js然后,在( link ) 中指定的处理程序附加到具有此数据属性的每个元素,它负责其余的工作。

原答案如下

Rails 使用一种称为Unobtrusive Javascript的技术将您在 .js 文件上指定的处理程序附加到它们各自的事件。

您可以在此(更具体地说是第 3 部分)和本文中阅读有关它的更多信息。

或者,您可以采取最有趣的方式并查看rails.js文件以了解所有魔术是如何工作的 :)

于 2012-08-31T12:21:02.873 回答