2012-12-11 146 views
2

我正在寫一個backbone.js的'app',並且想要將json的石墨/碳輸出直接映射到一些主幹模型/集合。backbone.js集合和石墨碳

一般

,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中的'target')。

我的問題涉及如何以最佳/優雅/靈活的方式在單個調用中實現多個度量(集合)的收集。即石墨支持爲其「目標」使用通配符,以便對/?target=some.string.*的ajax請求將帶回所有匹配的目標和數據點(如json示例中所示)。然後,我會把這個呈現給一個視圖,在這個視圖中,我會渲染累計數據或者繪製所有的測量值與時間的關係。

我想使用另一個集合(讓我們稱之爲集合),它將包含許多測量。我希望能夠執行類似Set.fetch()的操作,以從服務器獲取所有匹配的度量值,並讓Set通過單個ajax請求創建多個度量值集合。

沒有人有任何建議如何實現這個?或者甚至是表示這個模型/集合層的更好方式?

回答

1

雖然不直接回答你的問題 - 你看過graphene? - 這是一個用於石墨的javascript儀表板,它使用backbone.js。你可能會看到它是如何在那裏實現的,借用/竊取一些想法。

作爲一個方面說明 - 從我的經驗構建一個不同的野獸(giraffe,對不起,但重要的是給出上下文),匹配通配符目標和石墨有一些困難。主要原因是你不知道有多少個目標被返回。例如,當您希望其中一個目標在圖上具有紅色時,或者想要像註釋人一樣添加目標(繪製爲無限以標記基於時間的事件)時,這可能會非常棘手。在使用通配符和石墨多目標請求時,請牢記一點。