只需按照http://guides.spreecommerce.com/developer/asset.html的说明操作,但它不起作用。包含并加载了新的js文件,但是如果我创建具有相同名称的文件,则说无论如何都加载了product.js.coffee原始文件。有什么建议吗?
All.js
//= require jquery
//= require jquery_ujs
//= require spree/frontend
//= require_tree .
答案 0 :(得分:3)
我整个早上都在解决这个问题。
最终对我有用的是在/app/assets/javascripts/spree/frontend/all.js
中指定我想要覆盖的每个文件。
例如,如果您要覆盖cart.js.coffee
和checkout/address.js.coffee
,您的all.js
应如下所示:
//= require jquery
//= require jquery_ujs
//
//= require spree/frontend
//= require spree/frontend/cart
//= require spree/frontend/checkout/address
//
//= require_tree .
不要问我为什么这么做。我的理解是//= require_tree .
应该自动执行此操作,但我的情况是,它不是。
创建all.js
文件并冗余地指定每个文件后,这最终对我有用。但我是一个狂欢/铁路菜鸟,所以这可能是一个更好的解决方案。
实际上,为了实现这一目标,我必须将上述内容放在/vendor/assets/javascripts/spree/frontend/all.js
中并删除/app/assets/javascripts/spree/frontend/all.js
。仍然困惑为什么这是必要的,为什么require_tree
不会自动选择这些,但很高兴终于让它发挥作用。
答案 1 :(得分:1)
Backporting this patch for Solidus 2.1.0 解决了我替换/覆盖 JS 资产 [1] 的问题。
问题似乎是 Sprockets 存在一个问题,即使用 require_tree
或相关 require
会阻止管道中的 JS 资产被覆盖。
总结
在您项目的供应商/资产下创建一个新文件,文件名与您将在 Solidus 中替换的 JS 文件相同。例如,要覆盖文件 solidus_backend/app/assets/javascripts/spree/backend/flash.coffee
,请在项目中的 your_project/{app,vendor}/assets/javascripts/spree/backend/flash.coffee
处创建一个替换文件。 [2]
在您的项目中创建文件 your_project/{app,vendor}/assets/javascripts/spree/backend.js
和 your_project/{app,vendor}/assets/javascripts/spree/backend/templates/index.js
。
将 backend.js
和 index.js
文件的内容从 solidusio/solidus#1613 复制到您的项目中。
删除 Solidus 版本中不存在的文件的任何要求,如果您已经定义了 backend.js
和 index.js
,则保留所有自定义要求。 [3]
脚注
包括 .js、.coffee、.hbs 以及在资产管道编译期间编译为 JavaScript 的任何其他文件。
您项目中 {app,vendor}/assets
之间的任一目录都可以使用,因为它们都应该在资产管道加载路径中。您希望如何组织 Solidus 扩展和覆盖取决于您的偏好。
我必须从 spree/backend/images/upload
中删除 backend.js
和来自 spree/backend/templates/products/upload_progress
的 index.js
,因为我使用的是旧版本的 Solidus 并且这些文件尚不存在,所以我会从 Sprockets 收到 FileNotFound 错误。