【问题标题】:Rails 3.1 Asset Pipeline Javascript - specifying page load though jQuery ->Rails 3.1 Asset Pipeline Javascript - 通过 jQuery 指定页面加载 ->
【发布时间】:2013-04-27 07:59:26
【问题描述】:

这让我很沮丧。我希望有人可以帮助我。

在我的 application.js 文件中,我有以下内容:

//= require jquery
//= require jquery_ujs
//= require jquery.remotipart
//= require jquery-ui
//= require jquery.purr
//= require jquery.slides
//= require best_in_place
//= require twitter/bootstrap
//= require_tree .

我是否需要在我的一个或所有页面特定的 Javascript 中包含以下(或其等效项)?我知道在生产中它们都被合并到一个带有资产管道的文件中,所以......我是否会导出一个文件,没有文件,所有文件都带有这个......?

jQuery ->

我发现在所有特定于资源的 JavaScript 的顶部添加“jQuery ->”或“$ ->”几乎可以正常工作。我的问题是我有一个资源,除非我删除“jQuery->”,否则什么都不起作用。由于该资源的 JS 文件与另一个资源的 JS 文件进行交互以获取函数等。我也必须从中删除“jQuery ->”,这会导致意外行为。

只是想知道资产管道中的 js 文件的最佳实践是什么,并让它们一起工作。

谢谢

【问题讨论】:

    标签: jquery ruby-on-rails-3 coffeescript asset-pipeline


    【解决方案1】:

    在使用require_tree 时,您不能依赖加载资源的顺序。因此,如果您要使用相互依赖的 javascript 文件,请确保以正确的顺序要求它们。

    所以而不是:

    //= require_tree .
    

    使用

    //= require posts
    //= require comments
    

    然后调用函数或您在 cmets javascript 文件中的帖子中定义的任何内容。

    此外,当您像我假设的那样使用咖啡脚本时,您必须使用命名空间才能使变量在整个应用程序中可用。

    例如。

    posts.js.coffee

    $ ->
      window.my_super_variable = 'super'
    
      window.my_super_function = (message) ->
        alert(message)
    

    cmets.js.coffee

    $ ->
      my_super_variable += ' awesome'
    
      my_super_function(my_super_variable)
    

    如果在定义变量或函数时不使用window,它们将无法全局访问。

    【讨论】:

    • 这正是我需要的帮助。感谢您花时间整理此回复。现在一切正常,我在 application.js 中指定了加载顺序并使用 window.js 定义了我的全局函数。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-31
    • 2015-06-11
    • 2011-11-14
    • 2011-12-18
    • 2012-07-08
    • 2011-11-07
    • 1970-01-01
    相关资源
    最近更新 更多