簡體   English   中英

如何更新數據庫中的整個Backbone.js集合?

[英]How to update the whole Backbone.js collection that in database?

我在數據庫中有一個集合(一個對象列表)。 我可以像以下一樣獲取它: collectionModel.fetch()然后用戶更改該集合上的內容。 當用戶單擊“保存”按鈕時,必須在數據庫中更新整個集合列表。 我想也許我可以首先delete()舊的,然后用新的create()但我無法實現它。 我不能使用update()方法,因為在這種情況下,我應該找到哪些集合元素已更改但我想更新整個列表。 我怎樣才能做到這一點? 感謝幫助。

你在那個數據庫前面有一個REST api嗎? 這就是Backbone的使用方式。 當您的JavaScript代碼運行model.save(); 對您的api進行PUT請求。

您的問題是關於保存整個集合,因為如果您想要保留在Backbone的默認實現中,您將必須遍歷集合中的所有模型並為每個模型調用save。

如果要向服務器發出單個請求,則必須在集合中實現自定義方法。 就像是:

MyCollection = Backbone.Collection.extend({
    saveAll: function() {
        var data = this.toJSON();
        return Backbone.$.ajax({
            data: { objects: data },
            url: '/url/in/your/server/to/update/db'
        });
    }
});

這將把您集合中所有模型的數組轉換為JSON發送到您的服務器。

同樣,如果您希望使Backbone更輕松,那么您希望在服務器端擁有RESTful API。

如果要重置集合,則必須指定“重置”屬性。

collectionList.fetch({
    reset: true,

   ...
});

但我認為最好只更新它:

collectionList.fetch({
    remove: false,
    update: true,
    merge: true,

   ...
});

這是一個非常古老的問題,但我有另一種方法,所以我想我會發布它。

有時我的館藏有很多數據,而服務器卻無法完成所有數據。 我通過使用骨干集合中的一個下划線方法解決了這個問題, invoke (也依賴於jquery):

MyCollection = Backbone.Collection.extend({
  update: function(callback) {
    // Invoke the update method on all models
    $.when.apply($, this.invoke('update')).then(() => {
      // After complete call the callback method (if passsed)
      if(callback) {
        callback();
      }
    });
  }
});

當集合中包含模型時,可以通過調用collection.update()來使用它。 類似的方法可以用於創建或刪除集合,這應該是可修改的以捕獲錯誤,但我沒有考慮到這一點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM