backbone.js集合和石墨碳
我正在编写一个backbone.js“应用程序”,并希望将graphite/carbon的json输出直接映射到一些主干模型/集合 一般来说,json输出如下所示:backbone.js集合和石墨碳,backbone.js,collections,models,graphite,graphite-carbon,Backbone.js,Collections,Models,Graphite,Graphite Carbon,我正在编写一个backbone.js“应用程序”,并希望将graphite/carbon的json输出直接映射到一些主干模型/集合 一般来说,json输出如下所示: [ { 'target': 'some.string.1', 'datapoints': [ [ val1, timestamp1 ], [ val2, timestamp2 ]... ] }, { 'target': 'some.string.2', 'datapoints': [ [
[
{
'target': 'some.string.1',
'datapoints': [ [ val1, timestamp1 ], [ val2, timestamp2 ]... ]
},
{
'target': 'some.string.2',
'datapoints': [ [ val1, timestamp1 ], [ val2, timestamp2 ]... ]
},
...
]
我定义了一个简单的模型和集合,以便:
class Measurement extends Backbone.Model
defaults:
id: undefined
val: undefined
class Measurements extends Backbone.Collection
model: Measurement
initialize: (model, options) ->
if options.metric
@metric = options.metric
url: ->
'/?target=' + @metric
parse: (data,xhr) ->
if _.size(data) == 1
return _(data[0]['datapoints']).map( (d) ->
m = {}
m['id'] = new Date(0)
m['id'].setUTCSeconds( d[1] )
m['val'] = d[0]
m
)
undefined
正如您所看到的,我重载id作为每个度量的时间戳,并且特定“度量”的所有度量都存储在名为measurements的集合下
我还硬编码了它,因此它实际上只适用于一个度量集合(即json中的“target”)
我的问题是如何在一次调用中实现多个度量(集合)的收集的最佳/优雅/灵活。ie graphite支持对其“目标”使用通配符,因此对/?target=some.string.*
的ajax请求将带回所有匹配的目标和数据点(如json示例)。然后,我会将其呈现给一个视图,在该视图中,我会呈现(比如)累积数据或绘制所有测量值与时间的关系
我正在考虑使用另一个集合(我们称之为集合),其中包含许多度量值。我希望能够执行类似于Set.fetch()
的操作,从服务器获取所有匹配的度量值,并让集合从单个ajax请求创建多个度量值集合
有人对如何实施这一点有什么建议吗?或者是一种更好的表示此模型/收集层的方法?而不是直接回答您的问题-您看过吗?-它是graphite的javascript仪表板,使用
backbone.js
。您可能会看到它是如何在那里实现的,并借用/窃取一些想法
作为旁注——根据我构建另一个beast的经验(很抱歉插上了插头,但提供上下文很重要),将通配符目标与graphite匹配存在一些困难。主要原因是您不知道返回了多少个目标。例如,当您希望其中一个目标在图形上具有红色,或者希望添加类似注释器的目标(绘制为无限以标记基于时间的事件)时,这可能会很棘手。在使用graphite处理通配符和多目标请求时,需要记住一点