我最近开始在我的 Rails 3.2.14 应用程序中使用 CoffeeScript。目前,我们所有的 javascript 代码都混杂在 application.js 中,它也充当我们的清单文件。我们的计划是将这些内容提取到控制器特定的代码中,以便将来更容易维护。在我们的application_helper.rb
文件中,我们有这个助手
def css_tag_id
"#{controller.controller_name}-#{controller.action_name}"
end
我们将其用于特定于页面的 CSS 和 JavaScript。所以我的第一步是获取与我们的 PostsController 相关的代码并将其放入一个新文件posts.js.coffee
中。我使用上posts.js.coffee
的检查包装所有代码,以确保代码仅在 PostsController 呈现的视图上运行。这一切都被编译成一个大的 application.js 文件,这对我来说很好。这一切都完美无缺。id
body
但是,在其中一个页面上提交的 AJAX 表单会触发 PostsController 中的一个操作,该操作会呈现select_customer.js.erb
. 在这个模板中,它调用了一个现在定义在 中的方法posts.js.coffee
,并且由于某种原因不再起作用。
以下是涉及的所有文件的一个小示例:
post.js.coffee:
jQuery ->
if $('#posts-new').length > 0
keywordsAccordion()
keywordsAccordion = ->
$('.accordion').accordion
'active': 0,
'collapsible': true
select_customer.js.erb
keywordsAccordion();
CoffeeScript 是否正在编译posts.js.coffee
以使其全部命名空间或其他内容?我现在需要以不同于其他 js 模板的方式调用其中定义的方法吗?
我意识到这可能非常令人困惑,但如果有人可以帮助我,我将非常感激。