我有一个Backbone Paginator Collection:
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;
}
});
我在Backbone 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!");
}
});
通过查看网络活动,我可以看到它正在向服务器发送请求并接收适当的响应。但它从不调用渲染功能。重置和更改事件似乎不起作用。
任何想法我做错了什么?
由于
答案 0 :(得分:2)
我在2016年有同样的问题:)
当您使用'reset'
模式时,您需要收听// in a view
this.listenTo(this.collection, 'sync', this.renderPage);
事件,而不是reset()
。
'reset'
来自主干文档(http://backbonejs.org/#Collection-fetch):
当模型数据从服务器返回时,它使用set to (智能地)合并获取的模型,除非你通过{reset: true},在这种情况下,集合将被(有效地)重置。
默认情况下,它不会调用'sync'
,因此不会发生(window,document,'script','//www.google-analytics.com/analytics.js','ga');
事件。
我在这个答案中发现了(window,document,'script','//www.google-analytics.com/analytics.js','ga2');
事件:
https://stackoverflow.com/a/17053978/1657101
从骨干1.0开始,model.fetch()会触发同步'。这就是你应该绑定的东西。