对于 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
这种做法是否可以接受?如果不是,那么处理这些情况的最佳做法是什么?