Javascript Spree-无法覆盖js.coffee文件
只是简单地按照指令,但它就是不工作。包含并加载了新的js文件,但如果我创建了同名的文件,则会加载product.js.coffee原始文件。有什么建议吗 All.jsJavascript Spree-无法覆盖js.coffee文件,javascript,ruby-on-rails,coffeescript,overriding,spree,Javascript,Ruby On Rails,Coffeescript,Overriding,Spree,只是简单地按照指令,但它就是不工作。包含并加载了新的js文件,但如果我创建了同名的文件,则会加载product.js.coffee原始文件。有什么建议吗 All.js //= require jquery //= require jquery_ujs //= require spree/frontend //= require_tree . 整个上午我都在为这个问题焦头烂额 最后,对我有效的是在/app/assets/javascripts/spree/frontend/all.js中指定我想
//= require jquery
//= require jquery_ujs
//= require spree/frontend
//= require_tree .
整个上午我都在为这个问题焦头烂额 最后,对我有效的是在
/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\u tree.
应该自动完成,但我的情况是,事实并非如此
在创建了一个all.js
文件并冗余地指定了每个文件之后,这对我来说终于奏效了。但我是一个狂热的rails爱好者,所以很可能有更好的解决方案
编辑:
实际上,为了让这项工作正常进行,我必须将上述内容放入/vendor/assets/javascripts/spree/frontend/all.js
并删除/app/assets/javascripts/spree/frontend/all.js
。仍然不明白为什么这是必要的,为什么require_tree
不能自动拾取这些,但很高兴它最终能够工作。解决了我替换/覆盖JS资产的问题[1]
问题似乎是链轮存在问题,使用require\u tree
或相对require
可防止管道中的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
文件的内容从复制到项目中
backend.js
和index.js
,则保留任何自定义需求。[3]
脚注
{app,vendor}/assets
之间的任一目录都可以工作,因为它们都应该位于资产管道加载路径中。如何组织Solidus扩展和覆盖是您的首选问题
backend.js
和spree/backend/templates/products/upload\u progress
来自index.js
,因为我使用的是较旧版本的Solidus,而且这些文件还不存在,所以我会从链轮中得到一个FileNotFound错误。
在我的场景中,我试图在Solidus中覆盖
app/assets/javascripts/spree/backend/flash.coffee
。在我的项目中定义vendor/assets/javascripts/spree/backend/flash.coffee
,并将/=require-spree/backend/flash
添加到vendor/assets/javascripts/spree/backend/all.js
中,并没有覆盖原来的js代码,只添加了新的js代码。要删除旧的JS代码,还必须通过在我的项目中定义vendor/assets/javascripts/spree/backend.JS
来覆盖/=require spree/backend
调用。