如何在Rails 3.1中使用Sprockets架构引用JQuery插件中的文件?

7

Plupload插件是一个很好的例子。这是添加到vendor目录的插件清单:

./plupload/jquery.plupload.queue
./plupload/jquery.plupload.queue/css
./plupload/jquery.plupload.queue/css/jquery.plupload.queue.css
./plupload/jquery.plupload.queue/img
./plupload/jquery.plupload.queue/img/backgrounds.gif
./plupload/jquery.plupload.queue/img/buttons-disabled.png
./plupload/jquery.plupload.queue/img/buttons.png
./plupload/jquery.plupload.queue/img/delete.gif
./plupload/jquery.plupload.queue/img/done.gif
./plupload/jquery.plupload.queue/img/error.gif
./plupload/jquery.plupload.queue/img/throbber.gif
./plupload/jquery.plupload.queue/img/transp50.png
./plupload/jquery.plupload.queue/jquery.plupload.queue.js
./plupload/jquery.ui.plupload
./plupload/jquery.ui.plupload/css
./plupload/jquery.ui.plupload/css/jquery.ui.plupload.css
./plupload/jquery.ui.plupload/img
./plupload/jquery.ui.plupload/img/plupload-bw.png
./plupload/jquery.ui.plupload/img/plupload.png
./plupload/jquery.ui.plupload/jquery.ui.plupload.js
./plupload/plupload.browserplus.js
./plupload/plupload.flash.js
./plupload/plupload.flash.swf
./plupload/plupload.full.js
./plupload/plupload.gears.js
./plupload/plupload.html4.js
./plupload/plupload.html5.js
./plupload/plupload.js
./plupload/plupload.silverlight.js
./plupload/plupload.silverlight.xap

不要将这些文件重定位到各种样式表、javascripts和图像目录中,最好将它们保留在原地,并使用Sprockets require指令引用它们。特别是对于图像文件和其他类似.swf和.xap的资产,应该如何做到这一点?

2个回答

4
你可以使用Sprockets提供指令(provide directive)
例如,这是我使用Plupload的方式:
# app/assets/javascripts/plupload.js
//= require plupload/plupload
//= require plupload/plupload.flash
//= require plupload/plupload.silverlight
//= provide plupload/dependencies

相应的供应商目录是这样组织的:

vendor
├── assets
│   ├── javascripts
│   │   └── plupload
│   │       ├── dependencies
│   │       │   ├── plupload.flash.swf
│   │       │   └── plupload.silverlight.xap
│   │       ├── plupload.flash.js
│   │       ├── plupload.js
│   │       └── plupload.silverlight.js
│   └── stylesheets
└── plugins

当我想要使用Plupload时,我会使用<%= javascript_include_tag 'plupload' %>,并使用asset_path辅助工具来填充Plupload配置:

<%= javascript_include_tag 'plupload' %>

<script type="text/javascript">
$(function() {
    var uploader = new plupload.Uploader({
        runtimes : 'flash,silverlight',
        multipart : true,
        multipart_params : {
            'authenticity_token' : '<%= form_authenticity_token %>'
        },
        flash_swf_url : 
            '<%= asset_path "plupload/dependencies/plupload.flash.swf" %>',
        silverlight_xap_url :
            '<%= asset_path "plupload/dependencies/plupload.silverlight.xap" %>',
        url : '<%= url_for [@item, :photos] %>',
        // ...
    });

希望这能有所帮助。

2
我可能错了,但是Rails文档中提到:
“这并不意味着资源不再可以(或者不应该)放在public目录下了;它们仍然可以被放在public目录下,并且会由应用程序或Web服务器作为静态文件提供服务。只有当你希望在提供服务之前对文件进行一些预处理时,才会使用app/assets目录下的文件。http://ryanbigg.com/guides/asset_pipeline.html
如果你不希望对这些文件进行任何预处理,那么传统的public目录是否可以成为你的答案?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接