2

我正在编写一个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 请求中创建许多测量值集合。

有人对如何实施有任何建议吗?甚至是表示此模型/集合层的更好方法?

4

1 回答 1

1

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

作为旁注 - 根据我构建不同野兽的经验(长颈鹿,对不起插件,但提供上下文很重要),将通配符目标与石墨匹配存在一些困难。主要原因是您不知道返回了多少个目标。例如,当您希望其中一个目标在图表上显示为红色,或者想要添加像注释器这样的目标(绘制为无限以标记基于时间的事件)时,这可能会很棘手。在使用通配符和使用石墨的多目标请求时要牢记一些事情。

于 2012-12-24T08:43:06.530 回答