0

我正在尝试列出最后十个或更少模型的列表。我有使用 create 动态添加模型的事件。此事件在集合上调用“添加”,并根据我的逻辑正确添加一个元素。但我需要添加新元素,检查集合是否超过 10,如果是真的删除最后一个模型并添加新的

var model = Backbone.Model.extend({
  defaults: function() {
    return {id:null}
  }
});

var collection = Backbone.Collection.extend({
     model:model
});

var view = Backbone.View.extend({
   initialize: function(){
    var self = this;
    this.listenTo(collection, 'add', this.addOne);
    this.listenTo(collection, 'reset', this.addAll);
    this.listenTo(collection, 'all', this.render);
   },
   render: function(){
    this.$el.html();
return this;
   },
   addAll: function(){
this.collection.each(this.addOne, this);
   },
   addOne: function(model){
    //this is executed after 'create' but before this I need slice my collection
var view = new view({model:model});
this.$el.prepend(view.render().el);
   }
});

谢谢

4

2 回答 2

3

initialize在您正在检查大小Backbone.Collection.extendadd事件中绑定一个函数。

initialize: function() {            
    this.on('add', function() {
        this.checkSize();
    });
},

checkSize: function() {
    var max = 10;

    if (this.length > max) {
        this.reset(this.first(max));
    }
}
于 2013-05-07T07:01:41.380 回答
1

你可以这样做:

   addOne: function(model){
      //this is executed after 'create' but before this I need slice my collection
      if !model.get('new_field')
         model.set({new_field, ""})
      newField = new Date();
      while (this.collection.findWhere({new_field:newField})){
         newField = new Date();
      }
      model.set({new_field, newField});
      var view = new view({model:model});
      this.$el.prepend(view.render().el);
      this.checkLength()
   },
   checkLength: function(){
      if (this.collection.length > 10) {
          // remove model which gets minimum value by 'new_field'
      }
   }
于 2013-05-07T06:55:30.350 回答