gpt4 book ai didi

javascript - Backbone Paginator Collection 在重置时不触发渲染

转载 作者:行者123 更新时间:2023-11-30 18:10:32 26 4
gpt4 key购买 nike

我有一个主干分页器集合:

    var ExercisesCollection = Backbone.Paginator.requestPager.extend({

model: ExerciseModel,

paginator_core: {
url: "/exercises"
},

paginator_ui: {
firstPage: 1,
currentPage: 1,
perPage: 10,
totalPages: 10
},

server_api: {
"filter": "",
"categories": "",
"top": function() { return this.perPage; },
"skip": function() { return this.currentPage * this.perPage; }
},

parse: function (response) {
this.totalPages = response.meta.totalPages;
return response.data;
}

});

我像这样在主干 View 中使用它:

var Exercises = Backbone.View.extend({

initialize: function () {
this.collection = new ExercisesCollection();
this.collection
.on( "reset", this.render, this )
.on( "change", this.render, this);
this.collection.goTo( 1 );
},

render: function() {
alert("bah!");
}
});

通过查看网络事件,我可以看到它正在向服务器发送请求并接收适当的响应。但是它从不调用渲染函数。重置和更改事件似乎不起作用。

知道我做错了什么吗?

谢谢

最佳答案

我在 2016 年遇到了同样的问题:)
当您使用'server' 模式时,您需要监听'sync' 事件,而不是'reset'

// in a view
this.listenTo(this.collection, 'sync', this.renderPage);

来自 Backbone 文档(http://backbonejs.org/#Collection-fetch):

When the model data returns from the server, it uses set to (intelligently) merge the fetched models, unless you pass {reset: true}, in which case the collection will be (efficiently) reset.

因此默认情况下它不调用 reset(),因此没有 'reset' 事件。

我在这个答案中发现了 'sync' 事件: https://stackoverflow.com/a/17053978/1657101

As of backbone 1.0, model.fetch() triggers a 'sync'. That's what you should bind to.

关于javascript - Backbone Paginator Collection 在重置时不触发渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14676965/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com