【问题标题】:What's the best way to split up my Javascript or Coffeescript in a Rails app?在 Rails 应用程序中拆分我的 Javascript 或 Coffeescript 的最佳方法是什么?
【发布时间】:2012-03-20 01:03:22
【问题描述】:

假设我有一个带有资源的 Rails 应用程序 - 用户。我有应该可用于提供的任何页面的 javascript。我有应该可用于用户下提供的任何页面的 javascript。而且我有 javascript 应该可用于用户下的每个特定操作。在 Rails 3.1 及更高版本中,是否有一种简单的方法可以确保我的 Javascript 仅可用于需要它的页面?那么coffeescript呢?

【问题讨论】:

标签: javascript ruby-on-rails-3 coffeescript


【解决方案1】:

我认为 Bob 的链接项目是相关的(有一条评论与权衡性能与加载的文件数量有关),但我认为问题更多的是关于名称间距、范围和结构。

要具体回答这个问题(假设您使用的是 jQuery),请考虑以下 CoffeeScript:

$ ->
  doSomething()
  doSomethingElse("#some-element")

doSomething = ->
  alert("I'm doing something")

doSomethingElse  = (selector) ->
  alert("I'm hiding something")
  $(selector).hide()

CoffeeScript 编译器会将所有这些包装在一个匿名函数中,因此只能在加载页面的上下文中可用(脚本标签,或特定于控制器的文件,或用于全局的 application.js能见度)。

有几个模型需要考虑。一个简单的方法是遵循具有特定于模型的“事物”以及通常有用(全局)的“事物”的模式。因此,如果我想要一个特定于 User 的 javascript 函数,则它位于 app/assets/javascripts/users.js.coffee 中,否则它需要是全局的(在 application.js.coffee 中)。

rails-backbone gem 建议了一个更完整和复杂的解决方案,它具有创建 CoffeeScript 模型、视图、模板和路由器的生成器,这些生成器替换了我们使用常规 rails generate scaffold foo 获得的很多东西——同样各种 CRUD 操作以完全不同的方式完成,特别是模板(嵌入式 javascript)与 ERB 模板非常相似。对我来说,这更像是一种信仰的飞跃。

无论是在应用程序范围的文件中,还是在特定于控制器的文件中,在任何一种情况下,资产管道都会将所有代码混合在一起并将其全部发送给用户(假设您保留默认配置),但这是一个单独的主题。

不确定这是否回答了您的问题,但我认为区分资产的交付(资产管道所做的)和执行很重要javascript,这是一个范围界定的问题,CoffeeScript 在这方面做得非常好,而backbone.js 更进一步。

【讨论】:

    猜你喜欢
    • 2017-11-24
    • 1970-01-01
    • 2011-06-05
    • 2021-11-13
    • 2011-12-10
    • 1970-01-01
    • 2020-04-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多