在Rails 3中,假设我有以下代码:
控制器
...
format.js # create.js.erb
...
create.js.erb
$('#element').html("new content");
查看表单
...
button_to 'Create', element, remote: true
我想知道create.js.erb
文件中的JS是如何被调用的。
我的猜测是它返回JS代码,并且一些Rails助手在收到它时会调用它。这是正确的,还是还有其他任何魔法?
答案 0 :(得分:1)
修改强>
简短回答:基本上,您的假设是正确的,它将返回将执行的JS代码。
稍微长一点的答案:但背后有一些魔力。 单击该按钮时,它将向创建URL发出JSON请求,但要求格式为'js'。
然后控制器知道预期的格式是'js',并且在运行create
操作后,将呈现该格式的模板 - create.js.erb
。
Rails知道它应该执行此自定义JSON请求,因为:remote => true
选项。它为链接元素添加了data-remote=true
属性。
然后,rails.js
(link)中指定的处理程序将附加到具有此数据属性的每个元素,其中包含其余部分。
以下原始答案
Rails使用一种名为 Unobtrusive Javascript 的技术将您在.js文件上指定的处理程序附加到各自的事件中。
您可以在this(更具体地说,第3部分)和this文章中详细了解它。
或,您可以选择最有趣的路线并查看rails.js
文件,看看所有魔法是如何运作的:)