Ruby on rails Rails使用coffeescript动态更新morris.js数据

Ruby on rails Rails使用coffeescript动态更新morris.js数据,ruby-on-rails,ajax,json,coffeescript,morris.js,Ruby On Rails,Ajax,Json,Coffeescript,Morris.js,在我的Rails应用程序中,我有一个morris.js折线图,它在初始页面加载时工作得非常好。我现在要做的是在更新表中某些最佳位置字段时动态更新此图表(通过ajax:success) 更新morris.js图表需要传入一个新的哈希数组,例如(在我的例子中):[{“月”:“2014-05”,“现金头寸”:3},{“月”:“2014-06”,“现金头寸”:1}]。我的模型方法cash\u position很好地实现了这一点 问题就在这里。在CoffeeScript中的ajax:success函数中,

在我的Rails应用程序中,我有一个morris.js折线图,它在初始页面加载时工作得非常好。我现在要做的是在更新表中某些最佳位置字段时动态更新此图表(通过
ajax:success

更新morris.js图表需要传入一个新的哈希数组,例如(在我的例子中):
[{“月”:“2014-05”,“现金头寸”:3},{“月”:“2014-06”,“现金头寸”:1}]
。我的模型方法
cash\u position
很好地实现了这一点

问题就在这里。在CoffeeScript中的
ajax:success
函数中,我很难从模型方法
cash\u position
访问哈希数组。说这个哈希数组没有正确地转换为json可能更正确

我已经设置了一个控制器路由
/cash\u position
,将哈希数组呈现为json,但json呈现如下:

[{“月”=“2015-04”,“现金头寸”=11}

这会传递一个对象,而不是所需的哈希数组,因此图表会忽略它

如何以哈希数组的形式访问该方法的结果?仅供参考,我已通过手动将哈希数组键入下面的
.data()
,成功地更新了图表,因此我相信唯一的问题就是访问该哈希数组以及如何将其转换为json

静态页面。咖啡

$('.update-percent').on 'ajax:success', (event, data, status, xhr) ->
    data = $.ajax({url: "/payment_schedules/cash_position.json"})
    console.log(data)
    window.lineChart.setData(data)
`<%= @payment_schedule.cash_position %>`
控制台。在
数据上记录输出

responseText
显示具有上述不正确json输出的单一对象,而不是散列数组

使用控制器代码更新

$('.update-percent').on 'ajax:success', (event, data, status, xhr) ->
    data = $.ajax({url: "/payment_schedules/cash_position.json"})
    console.log(data)
    window.lineChart.setData(data)
`<%= @payment_schedule.cash_position %>`
控制器

...
def cash_position
    @payment_schedule = PaymentSchedule.find(params[:id])
end
使用cash_position.json.erb视图模板更新

$('.update-percent').on 'ajax:success', (event, data, status, xhr) ->
    data = $.ajax({url: "/payment_schedules/cash_position.json"})
    console.log(data)
    window.lineChart.setData(data)
`<%= @payment_schedule.cash_position %>`
``

您不需要/想要呈现JSON的视图。 基本上,JSON视图的速度很慢,因为您连接字符串,而转换Ruby对象是在高度优化的C代码中完成的

只需使用
呈现json:

def cash_position
    @payment_schedules = PaymentSchedule.find
    respond_to do |f|
      f.json { render json: @payment_schedule.cash_position }
    end
end
对于更复杂的需求,您可能希望使用awesomegem,它也非常容易测试

另外,您的ajax处理程序有点不对劲(对不起,我在CS方面是垃圾)


如果您使用上述模式,您可以避免使用图形所具有的任何数据结构要求污染API。

@papirtiger对于控制器代码是正确的,但我们最终使用了JQuery的
延迟。然后()
方法来实现这一点:

coffeescript
$.ajax(
url:“/payment\u schedules/cash\u position.json”
数据类型:“json”
)。然后(数据)->
window.lineChart.setData(数据)

$.ajax
是异步的-将其更改为
promise=$.ajax({url:/payment\u schedules/cash\u position.json})
然后在实际加载数据时更新图表
promise.done(事件、数据、状态、xhr)->window.lineChart.setData(数据)
还请添加控制器的相关代码。好的,我已经在帖子中添加了
现金
头寸的付款计划控制器代码。我已经合并了
.done
,但还没有运气。您的控制器只获取了一个
付款计划
-为什么您希望收到一个
付款计划
逻辑上成为一个散列数组?这没有意义。这是因为我的ajax请求直接进入.json url,它获取正确的数据,但使用“and=>”片段进行解析。因此我在控制器中没有太多内容。所以我想,如果我能正确解析它,直接进入json url将为我提供所需的内容。您好非常感谢您的支持。虽然还没有完成,但明天我将与我的编码合作伙伴一起进行更多的工作,以您的答案为指导。我将向您汇报。