我有一個表格數據視圖,可以在每個單獨的列上排序。由於數據量巨大,我更願意在頁面中顯示少量行並按需加載行。因此,當用戶對進行排序時,中的一列會向服務器發出新請求,並且新數據行被提取以顯示。 但用戶可以修改兩列或更多列的排序類型(asc或desc),彈出頁面允許其修改更多列的排序類型。我試圖通過列的元數據(asc/desc和其他信息)的集合來解決此用例。更改收集器上的監聽器(顯然是監聽模型更改)
var ColumnsMetadata = Backbone.Collection.extend({
model: ColMetadata
});
var ColMetadata = Backbone.Model.extend({
defaults: {
sort: 'none'
}
});
A EditSortView
頁面顯示和編輯列的排序信息。和一個TableView
來顯示錶格數據。 TableView
和EditSortview
均共享ColumnsMetadata
。
var EditSortView = Backbone.View.extend({
initialize: function() {
//this.colleciton = columnMetadataCollection
},
events: function() {
"change input.sortVal" : "_updateSortMetdata",
"click button#sort": '_sort'
},
_updateSortMetdata: function() {
// updates right ColMetadata instance' sort property
},
_sort: funciton() {
// should make fetch request only when user finally
// satisfy with sort order changes
}
});
var TableView = Backbone.View.extend({
initialize: function() {
// other set up code
// i could add listener on collection
this.listenTo(this.columnMetadataCollection, 'change', this._fetchAndUpdate);
},
_fetchAndUpdate: function() {
// uses columnMetadataCollection to fetch data
}
});
正如我在TableView中加入change
聽者上columnMetadataCollection
,對於每個colMetadata
變化(從EditSortView彈出)將觸發到服務器的新請求。但是,當用戶滿足所做的更改時,僅向服務器請求一個請求是最佳的。 如何在TableView中收聽columnMetadataCollection
以便只有請求被切斷?或者我如何使用Backbone來構建我的代碼以使其正確?
我讀交通警察插件。它看起來會創建'inProcess [key] = traffic'數組請求,並且對於每個請求都會驗證相關資源是否已經被請求。如果是這樣,它只需將成功/錯誤回調添加到該「交通」對象,不會創建新的需求。這意味着第一個請求返回時執行所有回調。但在這裏並非如此。在這裏,我希望將集合中所有'colMetadata'模型的更改發送到服務器。那麼只有服務器可以返回正確的一組行。 – ykjs121