关于控制器/视图特定javascript的Rails最佳实践

时间:2012-10-17 17:53:39

标签: javascript ruby-on-rails asset-pipeline

使用Rails 3+和资产管道,我的理解是,如果你指定

,资产/ javascripts下的所有javascript文件都会被自动包含并编译成一个js文件
require_tree . 
在application.js中

关于处理特定于控制器/视图的javascript的最佳做法是什么?例如,假设我有一个控制器/视图'Houses',我想使用jquery表单验证插件验证house表单,为此我已经将以下代码放在我的houses.js文件中

$(document).ready(function(){
  $("#new_house_form").validate();
});

这很好,但问题是,当我访问另一个页面(说/所有者)时,它会尝试验证house表单,并在javascript控制台中收到错误消息。当然,我可以检查当前页面上是否存在表单,然后只调用验证器,但如果我在.ready中有很多控制器特定代码,那对我来说似乎有点不洁净。

我解决此问题的方法是在application.js中创建文件夹assets / javascripts / global

 require_tree ./global //instead of require_tree .

并移动除了houses.js之外的所有其他js文件。然后,每当用户访问/ houses / new或/ houses / edit

时,我手动包含houses.js

这种做法可以接受吗?如果不是什么被认为是处理这些情况的最佳做法?

1 个答案:

答案 0 :(得分:0)

通常我只是让所有j都加载并在调用任何方法之前检查元素是否存在。

$(document).ready(function(){
  if($("#new_house_form").length > 0){
    $("#new_house_form").validate();
  }
});