[英]Leaflet + Backbone.js: how to update the view on model collection update?
[英]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.