Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Backbone.js 更改集合上的侦听器(显然侦听模型会更改)_Backbone.js_Marionette_Backbone Views_Backbone Model - Fatal编程技术网

Backbone.js 更改集合上的侦听器(显然侦听模型会更改)

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:

我有一个表格数据视图,能够对每一列进行排序。由于数据量巨大,我更喜欢在页面中显示几行,并根据需要加载行。因此,当任何用户对页面中的列进行排序时,都会向服务器发出新请求,并获取新的数据行以显示但是用户可以一次修改两列或更多列的排序类型(asc或desc),通过弹出页面可以修改更多列的排序类型。我试图通过为列收集元数据(asc/desc和其他信息)来解决这个用例

    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
模型的更改发送到服务器。然后,只有服务器才能返回正确的行集。