Javascript Spree-无法覆盖js.coffee文件

Javascript 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中指定我想

只是简单地按照指令,但它就是不工作。包含并加载了新的js文件,但如果我创建了同名的文件,则会加载product.js.coffee原始文件。有什么建议吗

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中替换的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
    文件的内容从复制到项目中

  • 删除Solidus版本中不存在的文件的任何需求,如果已经定义了
    backend.js
    index.js
    ,则保留任何自定义需求。[3]


  • 脚注

  • 包括.js、.coffee、.hbs以及在资产管道编译期间编译为JavaScript的任何其他文件

  • 项目中
    {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
    调用。