2012-07-12 84 views
0

我有一個本地存儲數據的「LocalStore」對象。它基於Lawnchair對象。Lawnchair.js沒有更新數據

var LocalStore = function(name) { 
    var that = this; 
    that.name = name; 

    that.lawnchair = Lawnchair({ name: that.name }, function(store) { 
     this.before('save', function(record){ 
      console.log("saving " + that.name); 
      console.log(record); 
     }); 

     this.after('save', function(record){ 
      console.log("saved " + that.name); 
      console.log(record); 
      that.getData(function(records){ 
       console.log("now it's this"); 
       console.log(records); 
      }); 
     }); 
    }); 

    that.getData = function(callback) { 
     that.lawnchair.get(that.name, callback); 
    }; 
}; 

LocalStore然後用_.extend延伸(從Underscore.js庫)用這種方法:

save: function(collection, callback) { 
     this.lawnchair.save({ key:this.name, value: collection }, function(record) { 
      callback(record); 
     }); 
    } 

該代碼被用來更新一個Backbone.js的集合對象到Lawnchair。第一次「保存」爲我的用戶集合運行,它保存正確,並顯示對象是一個簡單的鍵/值對,其中value是一個數組。

後來在我的代碼中,當用戶選擇一個默認項目時,我修改了用戶集合,並再次用用戶上的更新「defaultProjectId」調用「保存」。代碼運行無誤,但Lawnchair的after('save')代碼運行並向我顯示:
- 返回的record對象是鍵/值對,其中value是完整的Backbone.js集合,其defaultProjectId屬性設置正確。
- 從數據庫獲取最新數據的getData方法仍然顯示爲值爲簡單數組的鍵/值對,並且defaultProjectId設置不正確。

我不知道該怎麼做。它應該只是簡單地稱爲「lawnchair.save」更新記錄,但它不會。

+0

爲什麼使用extend來添加函數?您是將函數添加到LocalStore *函數*還是添加到使用新的LocalStore()創建的實例? – 2012-07-14 16:15:35

+0

你可以發佈Users集合代碼嗎?並且/或者將它放在[jsfiddle.net](http://jsfiddle.net)上? – 2012-07-14 20:02:09

回答

1

你可以試試這個jsfiddle嗎?

http://jsfiddle.net/QUgtg/1/

我已經重新創建你的代碼。而不是骨幹集合,我傳入一個對象數組。這似乎工作。你可以在Firebug中看到日誌輸出。

我用我自己的擴展代碼來添加save()。雖然說實話,我不明白你爲什麼想這樣做,而不是僅僅爲原型添加一個屬性。你的代碼在這方面可能有所不同。

如果我發佈的內容適合您的需求,您是否可以修改該代碼以顯示您做了哪些改變?如果可能,在jsfiddle上重新創建問題...

+0

我擺弄你的小提琴,結果與[這](http://jsfiddle.net/QUgtg/7/)...這實際上並沒有改變我在做什麼,但它確實使我去檢查我的代碼再次,我意識到我的代碼是試圖將我的密鑰保存爲我的數組索引和值作爲我的密鑰....所以你明白了因爲你讓我再次看第50次,並最終看到我的錯誤。 – 2012-07-17 02:38:24