【问题标题】:Extjs 4 Integration with Rails 3.1 (asset pipeline question)Extjs 4 与 Rails 3.1 的集成(资产管道问题)
【发布时间】:2011-06-12 15:38:05
【问题描述】:

一个典型的 extjs 示例应用程序通过引用以下文件来包含 extjs 库:

ext-all.css ext-all.js

包含这些文件的“rails 3.1 方式”是什么,注意到它们引用了数百个文件?子目录中的文件数

(例如 ext-4.0.2/resources/themes/stylesheets/ext4/default/_all.scss)

还有相对路径:

(例如 background-image:url('../../resources/themes/images/default/shared/shadow.png'))

我尝试了许多 require_tree 等的组合,但似乎无法正常工作。

我想知道我是否需要弄乱“提供”,但我似乎找不到我需要的文档。

【问题讨论】:

    标签: extjs ruby-on-rails-3.1 sprockets


    【解决方案1】:

    你想要的是通过 Rails 资产管道编译这个文件:

    resources/themes/templates/resources/sass/my-ext-theme.scss
    

    为了让它发挥作用,我艰难地学到了一些东西:

    1. ExtJS 使用 SASS 编译(Rails 也是如此)和 Compass,其中包括蓝图和指南针 CSS 工具包。 Compass 不适用于 Rails,您需要使用不包含 CSS 工具包的 gem“compass-rails”。只有主 compass gem 有这些工具包,它是 compass-rails 的依赖项,所以如果你捆绑 compass-rails,你应该得到它们,它们需要在你的 sass.load_paths 配置中。如果您在没有 compass-rails 的情况下包含“compass”gem,您将遇到奇怪的错误,并在您尝试解决这些问题时成为 rails 资产管道的专家!
    2. ExtJS 使用旧版本的 SASS,Rails 使用的新版本不喜欢在模块内部定义函数和 mixin。要解决此问题,请查看它给您的错误(始终是函数或 mixin 定义)并将它们移动到 _functions 或 _mixins 文件中。 (更多信息:getting error after ugrading to sass-3.1.8

    以下是启动和运行的方法:

    把它放到你的 config/application.rb 中:

    # Set up our ExtJS SASS build environment
    config.sass.load_paths << "#{Rails.root}/vendor/assets/stylesheets"
    config.sass.load_paths << "#{Rails.root}/vendor/assets/frameworks/compass/stylesheets"
    config.sass.load_paths << "#{Rails.root}/vendor/assets/frameworks/blueprint/stylesheets"
    

    将 ExtJS 样式表(SDK 中的 ext4/default 目录)放在这里:

    vendor/assets/stylesheets/ext4/default/
    

    将 my-ext-theme.scss 放入 app/assets/stylesheets 并像平常使用 rails 一样使用它。它将调用此代码:

    @import 'ext4/default/all';
    

    这将引入所有 ExtJS 定义,您应该开始了。

    【讨论】:

    • 所以我早就不用 ext 和 rails 了,所以我没有办法(希望)测试这个,但这个答案是如此彻底和真棒,我会接受它。谢谢!
    【解决方案2】:

    杰夫!看看my answer here,我想你的问题是一样的。

    【讨论】:

    • 我已经在 github 上打开了关于这个问题的 issue。仍然没有得到核心团队的答复。
    • 我开始认为 rails 3.1 的方法是将外部库粘贴到供应商/资产中,然后在视图中添加另一个包含标签。
    • 浪费了太多时间我放弃了,把extjs-4.0.2放到我的public目录下,然后:&lt;%= stylesheet_link_tag "application" %&gt; &lt;%= stylesheet_link_tag "/ext-4.0.2/resources/css/ext-all" %&gt; &lt;%= stylesheet_link_tag "/ext-4.0.2/examples/shared/example" %&gt; &lt;%= javascript_include_tag "application" %&gt; &lt;%= javascript_include_tag "/ext-4.0.2/ext-all-debug" %&gt; &lt;%= javascript_include_tag "/ext-4.0.2/examples/shared/examples" %&gt; &lt;%= javascript_include_tag "/ext-4.0.2/examples/grid/group-summary-grid" %&gt;
    • 经过另一次搜索后,我意识到真正的 Rails 3.1 方式是为 this tutorial 中的资产创建 gem。但肯定是有人准备的。
    • 是的,将(或符号链接)Ext 放入 public 是我自己正在做的事情,我认为没有太多理由为 Sprocket 的参与而战。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多