Rails 从 4.2.0 升级到 5.1.2 导致以下 coffeescript 代码中断
Rails upgrade from 4.2.0 to 5.1.2 causes the following coffeescript code to break
所以附件视图 运行 中显示的 coffeescript 代码在我的 Rails 4.2.0 视图中没有问题,但在 Rails 5.1.2 升级中中断了显示的消息:我已经升级了如下所示的宝石:
coffee-rails from 4.1.0 to 4.2.2
coffee-script-source from 1.9.0 to 1.12.2
并且 haml_coffee_assets 始终指向 master 分支,如下所示,因此那里没有变化:
gem 'haml_coffee_assets', git: "https://github.com/netzpirat/haml_coffee_assets"
在我开始做出疯狂的改变之前,我想看看是否还有其他人 运行 遇到过类似的问题。在我较新的 Rails 应用程序中,我正在远离 coffeescript,转而使用普通 javascript,并且嵌入式 javascript 代码没有问题。然而,这是一个没有被大量使用的旧应用程序,我想投入最少的时间来维护它。里面有太多的 Coffeescript 代码,我无法轻松地转换它。如果有一个网站可以让我将 coffeescript 转换为 Javascript 而不会出现太多问题,那么我愿意。最好的解决办法就是继续我所拥有的。
有人 运行 遇到过这个问题吗?有什么想法吗?
代码如下:
- if @well.has_sense_graph?
#sensitivity.tab
= render :partial => "shared_wells/show_sensitivity", :locals => {:sensitivity => sense_hash[:sensitivity], :offset => sense_hash[:offset] }
%br
#discount_chart
:coffeescript
$ ->
model = new Backbone.Model
forecastTickInterval: #{graph_hash[:forecast_tick_interval]}
typeWell: #{@well.to_json}
x_labels: #{graph_hash[:price_array]}
disc_rate_array: #{graph_hash[:disc_rate_array]}
disc_pv10_array: #{graph_hash[:disc_pv10_array]}
ngl_array: #{ngl_vol_array}
view = new VGStream.Views.TypeWells.Show(
model: model
).render()
VGStream.App.router = new VGStream.Routers.Tabs()
VGStream.App.currentView = view
Backbone.history.start()
_.defer ->
$(document).scrollTop(0)
所以我用实际的方法解决了这个问题。鉴于我必须摆脱应用程序中的 CoffeeScript 代码并将其替换为等效的 Javascript 代码的目标,我执行了以下操作:
我在 haml 页面中嵌入了 CoffeeScript 代码的所有页面,如上所示,在我提供的代码中,我将其替换为等效的 Javascript 代码,如下所示:
:javascript
$(function() {
...
});
请注意,我留下了 'pure' coffeescript 文件,即扩展名“.coffee”单独存储在 assets/javascript/... 文件夹中,因为我更直接的目标是获得Rails 5.1.2 升级尽快完成。
出于某种我不知道(我也不想知道)的原因,嵌入式 coffeescript 代码不再像在 Rails 4.2.0 版本中那样对我有效。但是由于我不再关心 CoffeeScript,所以这种混合解决方案对我来说是可以接受的。
所以附件视图 运行 中显示的 coffeescript 代码在我的 Rails 4.2.0 视图中没有问题,但在 Rails 5.1.2 升级中中断了显示的消息:我已经升级了如下所示的宝石:
coffee-rails from 4.1.0 to 4.2.2
coffee-script-source from 1.9.0 to 1.12.2
并且 haml_coffee_assets 始终指向 master 分支,如下所示,因此那里没有变化:
gem 'haml_coffee_assets', git: "https://github.com/netzpirat/haml_coffee_assets"
在我开始做出疯狂的改变之前,我想看看是否还有其他人 运行 遇到过类似的问题。在我较新的 Rails 应用程序中,我正在远离 coffeescript,转而使用普通 javascript,并且嵌入式 javascript 代码没有问题。然而,这是一个没有被大量使用的旧应用程序,我想投入最少的时间来维护它。里面有太多的 Coffeescript 代码,我无法轻松地转换它。如果有一个网站可以让我将 coffeescript 转换为 Javascript 而不会出现太多问题,那么我愿意。最好的解决办法就是继续我所拥有的。
有人 运行 遇到过这个问题吗?有什么想法吗?
代码如下:
- if @well.has_sense_graph?
#sensitivity.tab
= render :partial => "shared_wells/show_sensitivity", :locals => {:sensitivity => sense_hash[:sensitivity], :offset => sense_hash[:offset] }
%br
#discount_chart
:coffeescript
$ ->
model = new Backbone.Model
forecastTickInterval: #{graph_hash[:forecast_tick_interval]}
typeWell: #{@well.to_json}
x_labels: #{graph_hash[:price_array]}
disc_rate_array: #{graph_hash[:disc_rate_array]}
disc_pv10_array: #{graph_hash[:disc_pv10_array]}
ngl_array: #{ngl_vol_array}
view = new VGStream.Views.TypeWells.Show(
model: model
).render()
VGStream.App.router = new VGStream.Routers.Tabs()
VGStream.App.currentView = view
Backbone.history.start()
_.defer ->
$(document).scrollTop(0)
所以我用实际的方法解决了这个问题。鉴于我必须摆脱应用程序中的 CoffeeScript 代码并将其替换为等效的 Javascript 代码的目标,我执行了以下操作:
我在 haml 页面中嵌入了 CoffeeScript 代码的所有页面,如上所示,在我提供的代码中,我将其替换为等效的 Javascript 代码,如下所示:
:javascript
$(function() {
...
});
请注意,我留下了 'pure' coffeescript 文件,即扩展名“.coffee”单独存储在 assets/javascript/... 文件夹中,因为我更直接的目标是获得Rails 5.1.2 升级尽快完成。
出于某种我不知道(我也不想知道)的原因,嵌入式 coffeescript 代码不再像在 Rails 4.2.0 版本中那样对我有效。但是由于我不再关心 CoffeeScript,所以这种混合解决方案对我来说是可以接受的。