我使用Backgrid和Pageablecollection进行分页,每次我发出请求时,我都可以在Chrome Developer的“网络”标签上看到请求被触发两次,我无法弄清楚原因。
我的代码如下所示:
RecipeManager.module('Entities', function (Entities, RecipeManager, Backbone, Marionette, $, _) {
Entities.Recipe = Backbone.NestedModel.extend({
urlRoot: 'recipes,
parse: function (response) {
return response.results[0]
}
}
Entities.RecipeCollection = Backbone.PageableCollection.extend({
model: Entities.Recipe,
sync: function (method, model, options)
{ // custom headers in here},
state: {
firstPage: 1
}
queryParams: {
currentPage: 'page',
pageSize: 'per_page'
},
parseState: function (resp, queryParams, state, options) {
return {totalRecords: resp.meta.total}
},
parseRecords: function (response, options) {
return response.results
}
})
var API = {
getRecipeEntities: function () {
var recipes = new Entities.RecipeCollection()
var defer = $.Deferred()
recipes.fetch({
reset: true,
url: 'https://myurl/forgetting/data',
success: function (data) {
defer.resolve(data)
}
})
var promise = defer.promise()
$.when(promise).done(function (fetchedRecipes) {
})
return promise
}
}
RecipeManager.reqres.setHandler('recipe:entities', function () {
return API.getRecipeEntities()
})
然后在Recipes.ListController中我有以下内容:
RecipeManager.module('RecipesApp.List', function (List, RecipeManager, Backbone, Marionette, $, _) {
List.Controller = {
var recipesListLayout = new List.Layout()
listRecipes: function () {
var fetchingRecipes = RecipeManager.request('recipe:entities')
$.when(fetchingRecipes).done(function (recipes) {
var recipesListView = new List.Recipes({
collection: recipes
})
})
var columns = [{ // load of columns defined here }]
recipesListLayout.on('show', function(){
var paginator = new Backgrid.Extension.Paginator({
collection: recipes,
render: function () {
this.$el.find('ul').addClass('pagination')
return this
}
)}
recipesListLayout.$el.append(paginator.render().el)
}
}
RecipeManager.regions.main.show(recipesListLayout)
}