我最近开始在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
使用的支票id
上body
,以确保只有运行在由PostsController渲染的视图代码。所有这些都被编译到一个大的application.js文件中,这对我来说很好。所有这一切都完美。
但是,其中一个页面上的AJAX提交表单会在PostsController中渲染一个动作select_customer.js.erb
。在此模板中,它调用了现在在中定义的方法,posts.js.coffee
由于某种原因,该方法不再起作用。
这是涉及的所有文件的一个小示例:
posts.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模板不同的方法来定义其中定义的方法吗?
我意识到这可能会令人困惑,但是如果有人可以帮助我,我将非常感激。
每个coffeescript文件都具有命名空间,因此其功能仅在同一文件中可用。因此keywordsAccordion()
只能在posts.js.coffee
文件内访问。
您可以将这些功能附加到window
对象上,使它们可以在任何地方使用:
window.keywordsAccordion = ->
...
我相信您也可以使用@keywordsAccordion = ->
,这是简写this.keywordsAccordion = ->
(this
指的是全球范围)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句