2013-06-26 63 views
0

我正在尋找與節點上的持久內存數據存儲結合使用Backbone。我希望能夠使用Backbone訪問此商店並反映更改。綁定骨幹模型和集合來源圖

數據可能是這個樣子:

var data = 
[ 
    { 
     baz: 'baz' 
    } 
] 

什麼話,我希望能夠做的是這樣的:

var dataCollection = new Backbone.Collection(data); 
dataCollection.first().set('baz', 'new value'); 

data[0].baz //==> 'new value' 

現在更有趣的一點是,如果我這樣做:

dataCollection.add({ baz: 'a whole new baz' }); 

data //==> 

[ 
    { 
     baz: 'baz' 
    }, 
    { 
     baz: 'a whole new baz' 
    } 
] 

基本上我想引導骨幹模型/集合本地對象/數組,並且對對象反映的Backbone對象有任何更改。

  1. 有沒有辦法用原生骨幹做到這一點?
  2. 這個想法或Backbone 功能會有什麼根本性的缺陷,會因爲什麼原因而破壞?
  3. 是否有任何圖書館會這樣做已經存在?
+0

骨幹不會更改您的原始數據變量的值,如果這就是您要求的。除非您手動更改數據的值:'data = myModel.toJSON();'。 – idbehold

+0

你在服務器端運行Backbone嗎? – HighCat

+0

@HighCat是的,我在Node上運行它。 –

回答

0

我不確定主幹是否會在節點上運行。我對這個主題沒有經驗。至於實際反映骨幹模型/集合與數據存儲的變化,你可以聽模型/集合變化事件(假設它甚至可以運行)。

this.listenTo(this.model,'change',this.updateDataStore); 

updateDataStore: function(model) { 
    //access model.changed to reflect just the changed attributes to your datastore 
} 

http://backbonejs.org/#Model-changed

這聽起來像一個簡單的事件系統會給你你需要很好地做到這一點沒有骨幹網的所有槓桿。

如果您希望model.save將更改保留在內存數據存儲中,那麼您可以覆蓋Backbone.sync以不發送XHR,但只需更改數據存儲。這裏整潔的事情是,如果你爲所有不同的http操作實現它,你也應該能夠獲取。

現在,所有你需要的是在模型的事件,有它看change本身,然後調用this.save: this.listenTo(this,'change',this.save);

讓我知道如果這就是你以後。

+0

骨幹絕對在節點上運行。另外,也許我的問題還不清楚,關鍵是僅僅使用本地Backbone對象(或者修改基本原型,就像創建一個Backbone庫來完成它),而不是通過事件手動硬連線它,這自然是非常的容易做到。 –

+0

請參閱我的編輯,瞭解執行此操作的一些方法。 – damienc88