Backbone.js 更改集合上的侦听器(显然侦听模型会更改)
我有一个表格数据视图,能够对每一列进行排序。由于数据量巨大,我更喜欢在页面中显示几行,并根据需要加载行。因此,当任何用户对页面中的列进行排序时,都会向服务器发出新请求,并获取新的数据行以显示但是用户可以一次修改两列或更多列的排序类型(asc或desc),通过弹出页面可以修改更多列的排序类型。我试图通过为列收集元数据(asc/desc和其他信息)来解决这个用例Backbone.js 更改集合上的侦听器(显然侦听模型会更改),backbone.js,marionette,backbone-views,backbone-model,Backbone.js,Marionette,Backbone Views,Backbone Model,我有一个表格数据视图,能够对每一列进行排序。由于数据量巨大,我更喜欢在页面中显示几行,并根据需要加载行。因此,当任何用户对页面中的列进行排序时,都会向服务器发出新请求,并获取新的数据行以显示但是用户可以一次修改两列或更多列的排序类型(asc或desc),通过弹出页面可以修改更多列的排序类型。我试图通过为列收集元数据(asc/desc和其他信息)来解决这个用例 var ColumnsMetadata = Backbone.Collection.extend({ model:
var ColumnsMetadata = Backbone.Collection.extend({
model: ColMetadata
});
var ColMetadata = Backbone.Model.extend({
defaults: {
sort: 'none'
}
});
显示和编辑列排序信息的EditSortView
页面。以及一个表格视图
,用于显示表格数据。表视图
和编辑器视图
都共享列数据
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中的columnMetadataCollection
上添加的change
侦听器一样,对于每个colMetadata
更改(从EditorTView弹出窗口),都会触发对服务器的新请求。但当用户满意所做的更改时,最好只向服务器发出一个请求。
如何在TableView中侦听
columnMetadataCollection
,以便只向服务器发出请求?或者,我如何用主干结构我的代码以使其正确?您可能需要研究限制请求的速率,例如使用TrafficCop。看
另一个选项是保留对调用(例如,
fetch
时返回的xhr的引用,并使用resolve
或fail
中止操作(请参见)I read traffic cops plugin。它似乎创建了请求的inProcess[key]=traffic
数组,并为每个请求验证所涉及的资源是否已经被重新请求。如果是,它只是将成功/错误回调添加到该流量
对象,不会创建新的请求。这意味着当第一个请求返回时,将执行所有回调。但事实并非如此。在这里,我希望将集合中所有colMetadata
模型的更改发送到服务器。然后,只有服务器才能返回正确的行集。