使用Backgrid和PageableCollection获取方法触发两次

时间:2015-11-09 14:25:51

标签: backbone.js pagination backbone-collections backgrid

我使用Backgrid和Pageablecollection进行分页,每次我发出请求时,我都可以在Chrome Developer的“网络”标签上看到请求被触发两次,我无法弄清楚原因。

enter image description here

我的代码如下所示:

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)
}

0 个答案:

没有答案