backbone.js集合和石墨碳



我正在编写一个backbone.js‘app’,并希望将石墨/碳的json输出直接映射到一些骨干模型/集合。

一般来说,json输出是这样的:

[
{
'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中的"目标")。

我的问题是如何最好/优雅/灵活地在一个调用中实现多个测量(集合)的收集。ie石墨支持对其"目标"使用通配符,因此对/?target=some.string.*的ajax请求将带回所有匹配的目标和数据点(如json示例)。然后我会把它呈现给一个视图,在那里我会呈现累积数据或绘制所有测量值与时间的关系图。

我正在考虑使用另一个集合(让我们称之为集合),它将包含许多测量。我希望能够做一些类似Set.fetch()的事情,从服务器获取所有匹配的测量,并让Set从单个ajax请求创建许多测量集合。

有人对如何实现这一点有什么建议吗?或者甚至是一种更好的方式来表示这个模型/集合层?

虽然没有直接回答你的问题-你看过石墨烯吗?-这是一个石墨的javascript面板,它使用backbone.js。你可能会看到它是如何在那里实现的,并借用/窃取一些想法。

顺便说一句,根据我构建不同野兽的经验(长颈鹿,很抱歉插了插头,但重要的是要给出上下文),将通配符目标与石墨匹配存在一些困难。主要原因是你不知道返回了多少目标。例如,当您希望其中一个目标在图形上具有红色,或者希望添加一个像注释器一样的目标(绘制为无限以标记基于时间的事件)时,这可能会很棘手。在使用石墨处理通配符和多目标请求时,需要记住一些事项。

最新更新