返回时,骨干收集会触发两次

时间:2013-12-22 11:08:55

标签: backbone.js triggers marionette backbone-collections

我有一个集合的问题,当我第一次加载我的compositeView时,一切都运行良好但是当我开始在我的应用程序中导航然后回到我的compositeView(Backbone.history.navigate)时,它看起来像我的集合是两次调用(我的itemviews被触发两次)。

我已经尝试调试了,但是我只获取了一次收集,只有一个init,路由器似乎也没问题。

这是我的compositeView:

'use strict';
define(["jquery", "backbone", "marionette", "text!templates/portraits/portrait.html", "view/portraits/portraitItemView", "collection/portraitCollection", "application", "JSMovieclip"], function($, Backbone, Marionette, template, PortraitItemView, portraitCollection, App) {
var PortraitsCompositeView = Marionette.CompositeView.extend({
    template : _.template(template),
    collection : portraitCollection,
    tagName: "div",
    id : "articles",
    itemView : PortraitItemView,
    itemViewContainer : '#list-articles',
    itemViewOptions: {
      collection: portraitCollection
    },
    initialize : function (options) {

        _.bindAll(this);
        this.options = options || {};
        this.collection.fetch({
          type: 'POST',
          success : function(data, raw) {
            App.execute('loader', false);
          }
        });
    },

这是我的收藏:

'use strict';
define(["jquery", "underscore", "backbone", "marionette", "model/portraitsModel"], function($, _, Backbone, Marionette, PortraitModel) {
    var PortraitCollection = Backbone.Collection.extend({
        model : PortraitModel,
        sync: function(method, model, options) {

          var params = _.extend({
              type: 'GET',
              dataType: 'jsonp',
              url: 'http://backend.url.fr/api/portraits/get_list/',
              processData: false
          }, options);

          return $.ajax(params);
        },
        parse : function(response) {
            this.totalLength = response.count;
            return response.portraits;
        }
    });
    return new PortraitCollection;
});

2 个答案:

答案 0 :(得分:0)

您的集合提取会将项目附加到自身。

您可以将reset:true添加到Collection.fetch属性

initialize : function (options) {

    _.bindAll(this);
    this.options = options || {};
    this.collection.fetch({
      reset: true,
      type: 'POST',
      success : function(data, raw) {
        App.execute('loader', false);
      }
    });
},

答案 1 :(得分:0)

我终于找到了我的错误,我的json正在返回一个空的“id”字段,在修复它之后,一切都很好。