【问题标题】:RoR call <%= raw Model.all.to_json %> inside of a CoffeeScript doesn't work everytimeCoffeeScript 中的 RoR 调用 <%= raw Model.all.to_json %> 并非每次都有效
【发布时间】:2015-10-31 18:00:19
【问题描述】:

因为我想在咖啡文件中执行 Rails 代码,所以我将脚本文件命名为“picture.coffee.erb”,它看起来像这样:

drawDots = (x) ->
  canvas = document.getElementById 'picture'
  context = canvas.getContext '2d'
  drawDot(context, i['dim_x'], i['dim_y']) for i in x[0]

$ ->
  drawDots [<%= raw Dot.all.to_json %>]

当我第一次执行这段代码时,一切都很好。但是,当我进行一些更改(例如添加一些新点)时,我的视图不会“刷新”并且我仍然看到旧数组,直到我要对我的咖啡文件进行一些更改。然后我可以看到我的观点发生了一些变化……但这有点不可预测。 每次网站刷新时如何让这段代码刷新?

我已经试过了 window.onload = -> 或 document.ready -> 只需 $ ->

【问题讨论】:

  • 我相信这是 Safari 试图更有效,因为当我对我的 coffee.erb 文件进行一些更改时,我的数据会刷新......但是......当我要 ctrl+z 这个文件时该网站似乎及时回到了我的 Dots 所在的“旧版数据库”。 ;> 如何让浏览器在每次加载时刷新此脚本?
  • 您确定您的服务器在每次请求时都重新编译 CoffeeScript 吗?服务器无法知道picture.js 依赖于您的整个dots 表。如果您的页面发出单独的 AJAX 请求来加载点,我认为您会过得更好。
  • 不幸的是,你是对的 .. 我使用了 Gon gem .. 它解决了这个特殊问题,但现在我需要通过 CoffeeScript 将一些值传递给服务器 .. AJAX 会是更好的解决方案.谢谢你的消息。

标签: ruby-on-rails json coffeescript erb


【解决方案1】:

我已经设法用'gon' gem 做到了。 tutorial is here

【讨论】:

    【解决方案2】:

    Ruby 代码仅在第一次请求时由服务器上的 erb 处理。一旦 HTML 被传递给浏览器(在第一个请求上),它就像来自 Dot.all 的输出是硬编码的。您需要在客户端中执行某些操作来更新该数组以反映客户端更改。

    Gon 不会真的帮上忙的。您仍然需要更新客户端数据对象。您可以考虑使用 Ember、Angular 或 Backbone 之类的东西来帮助解决这个问题。

    【讨论】:

      猜你喜欢
      • 2014-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多