我有一个表格数据视图,可以对每个列进行排序。由于数据量很大,我更喜欢在页面中显示几行并按需加载行。因此,当用户对页面中的列进行排序时,会向服务器发送新请求,并且会提取新数据行以进行显示。 但是用户可以使用弹出页面一次修改两列或更多列的排序类型(asc或desc),允许它修改更多列的排序类型。我试图用列的元数据集合(asc / desc和其他信息)来解决这个用例。
var ColumnsMetadata = Backbone.Collection.extend({
model: ColMetadata
});
var ColMetadata = Backbone.Model.extend({
defaults: {
sort: 'none'
}
});
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构建我的代码以使其正确?
答案 0 :(得分:0)
您可能需要考虑对请求进行速率限制,例如:与TrafficCop。见http://lostechies.com/derickbailey/2012/03/20/trafficcop-a-jquery-plugin-to-limit-ajax-requests-for-a-resource/
另一个选项是保持对您致电(例如)fetch
时返回的xhr的引用,并使用resolve
或fail
中止操作(请参阅http://api.jquery.com/category/deferred-object/ })