4

对于 Rails 3+ 和资产管道,我的理解是 assets/javascripts 下的所有 javascript 文件都会自动包含并编译到一个 js 文件中,如果您指定

require_tree . 

在 application.js 中。

处理特定于控制器/视图的 javascript 的最佳实践是什么?例如,假设我有一个控制器/视图“房屋”,并且我想使用 jquery 表单验证插件来验证房屋表单,为此我将以下代码放在了我的 house.js 文件中

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

这很好,但问题是当我访问另一个页面(比如 /owners)时,它会尝试验证房屋表格,并且我在 javascript 控制台中收到一条错误消息。当然,我可以检查表单是否存在于当前页面上,然后才调用验证器,但这对我来说似乎有点不干净,尤其是如果我在 .ready 中有很多控制器特定的代码。

我的解决方案是在 application.js 中创建一个文件夹 assets/javascripts/global

 require_tree ./global //instead of require_tree .

并移动除其中的houses.js 之外的所有其他js 文件。然后,每当用户访问 /houses/new 或 /houses/edit 时,我都会手动包含 house.js

这种做法是否可以接受?如果不是,那么处理这些情况的最佳做法是什么?

4

1 回答 1

0

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

$(document).ready(function(){
  if($("#new_house_form").length > 0){
    $("#new_house_form").validate();
  }
});
于 2012-10-17T18:48:12.227 回答