我正在编写一个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 中的“目标”)。
我的问题涉及如何最好/优雅/灵活地在一次调用中实现多个测量(集合)的收集。即,石墨支持对其“目标”使用通配符,以便 ajax 请求/?target=some.string.*
将带回所有匹配的目标和数据点(如在 json 示例中)。然后我会将其呈现给一个视图,在那里我将呈现累积数据或绘制所有测量值与时间的关系。
我正在考虑使用另一个包含许多测量值的集合(我们称之为集合)。我希望能够做一些事情,比如Set.fetch()
从服务器获取所有匹配的测量值,并让 Set 从单个 ajax 请求中创建许多测量值集合。
有人对如何实施有任何建议吗?甚至是表示此模型/集合层的更好方法?