假设我有一个带有资源的rails应用程序 - 用户。我有javascript应该可用于任何服务的页面。我有javascript应该可用于在User下提供的任何页面。我有用户可以使用的每个特定操作的javascript。在Rails 3.1及更高版本中,是否有一种简单的方法可以确保我的Javascript仅适用于需要它的页面?那个coffeescript呢?
答案 0 :(得分:0)
我认为来自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)能见度)。
有几种模型需要考虑。一个简单的方法是遵循具有特定于模型的“事物”的模式,以及通常有用的(全局)模式。因此,如果我想要一个特定于用户的javascript函数,那么它将进入app/assets/javascripts/users.js.coffee
,否则它需要是全局的(在application.js.coffee
中)。
rails-backbone
gem提出了一个更加完整和复杂的解决方案,它有一些生成CoffeeScript模型,视图,模板和路由器的生成器,可以取代我们通过常规rails generate scaffold foo
获得的许多内容。 - 相同类型的CRUD操作以完全不同的方式完成,特别是模板(嵌入式javascript)与ERB模板非常相似。对我来说,这更像是一种信念的飞跃。
无论是在应用程序范围的文件中,还是在特定于控制器的一个或多个文件中,在任何一种情况下,Asset Pipeline都会将所有代码放在一起并将其全部发送给用户(假设您保留默认配置),但这是一个单独的主题。
不确定这是否回答了问题,但我认为区分资产管道的资产交付和执行是很重要的。 javascript,这是一个范围问题,CoffeeScript做得非常好,而且backbone.js更进一步。