为什么不从我的Rails简易JS模板调用此方法

马克什卡兹

我最近开始在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使用的支票idbody,以确保只有运行在由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模板不同的方法来定义其中定义的方法吗?

我意识到这可能会令人困惑,但是如果有人可以帮助我,我将非常感激。

迪伦·马科(Dylan Markow)

每个coffeescript文件都具有命名空间,因此其功能仅在同一文件中可用。因此keywordsAccordion()只能在posts.js.coffee文件内访问

您可以将这些功能附加到window对象上,使它们可以在任何地方使用:

window.keywordsAccordion = ->
  ...

我相信您也可以使用@keywordsAccordion = ->,这是简写this.keywordsAccordion = ->this指的是全球范围)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么在JS类方法中定义和调用的函数中未定义此变量。我认为这是窗口

我想知道为什么模板方法可以调用非模板方法?

ASP.NET MVC为什么不从视图中调用此post操作?

为什么不调用此方法就执行?

为什么调用此虚拟方法?

为什么调用此重写的方法?

为什么不从ViewController调用* drawRect *?

为什么调用此方法会导致我的应用超出免费配额?

为什么我无法在 Javascript Aframe.registerComponent 中调用此方法?

为什么JS不从Jinja读取数据?

为什么从另一个线程调用notifyAll()之后,我的线程为什么不从wait()返回?

为什么调用此Javascript函数提交我的表单?

为什么此javascript函数不从for循环返回多个对象?

为什么不是每次都调用我的 XSLT 1.0 模板?

为什么未调用我的委托方法?

为什么我的方法没有调用?

为什么 Powermockito 调用我的模拟方法?

为什么我的模板变量在Rails中被忽略?

为什么此方法被调用两次(pytest)

为什么未调用此RxJava订阅方法?

为什么不按名称调用此String()方法

为什么不能在actionListener内部调用此方法?

为什么即使在调用此mutator方法后仍返回错误?

为什么此方法调用失败?(泛型和通配符)

为什么此方法调用不明确?

为什么此For循环不会更改我的对象数组?JS

当功能模板调用类模板的静态方法模板时,为什么编译失败?

为什么我们声明此方法已同步?

为什么Rails不显示我的API调用结果?