2012-12-29 98 views
0

我很好奇Rails包含.js文件的方式。 从资产管道协助,我很好奇存储在view中的.js文件。 例如,如果您想将一个AJAX调用应用于PostsController中名为like的操作,您只需将like.js.erb中的相关AJAX代码放置在posts视图文件夹中即可。然后,当用户调用操作like时,javascript被自动触发。Rails包括.js文件

我的问题是

  1. 难道是正确的JavaScript文件名匹配某些动作调用操作时自动叫什么名字?
  2. 如果我想在某个视图中包含一个与任何操作不对应的JavaScript文件,我该怎么办?只需将其包含在应用程序清单中? 更具体地说,我现在有tag-autocomplete.js.erbviews/post。我是否将它移动到assets文件夹,并将其包含在application.css

谢谢。

回答

0
  1. 是的,虽然我没有立即看到如果你有like.js.erb和like.html.erb会发生什么。看起来其中一个或另一个将被选中,并且可能是任意的。

  2. 我通常会在脚本标记中嵌入JavaScript。如果它真的只能用于这种观点,那是合理的。另一方面,application.js被缓存,并且可以节省带宽,以便在那里放置任何内容。但是,由于您在询问涉及模板的事情,因此我认为缓存是不可取的。对此,我说你应该尽量减少使用JS中的模板。有时它是有道理的,但要小心。

(FYI:this是哪里的相关功能的核心定义。)

+0

这不是任意的,虽然,对不对?控制器将有一个用于指定视图是js文件的动作的respond_to块。如果两个视图都存在,那么控制器的动作中指定的视图将会触发,除非我错了。 – John

+0

Rails使用Accept请求头来确定哪些格式可以接受并用于调用第一个匹配的响应者。因此,您在respond_to块中定义format.js,format.html等的顺序可能会影响Rails选择的顺序。 –

+0

我只关心隐式渲染,因为显式渲染似乎与问题不相关。对于隐式渲染,据我所知它仍然是任意的,但这对于显式渲染很有意义。 – tehgeekmeister