2013-05-07 2 views
0

Я пытаюсь составить список с последними десятью моделями или менее по коллекции. У меня есть события для динамического добавления моделей с помощью create. Это событие вызывает «добавить» в коллекцию, и с моей логикой это добавляет правильно один элемент. Но мне нужно добавить новый элемент, проверьте, если коллекция имеет более чем 10, если это правда, удалить последняя модель и добавить новыеБазовая коллекция всегда с n моделями

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

благодаря

ответ

1

Yoou можно сделать так:

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' 
     } 
    } 
3

Bind функцию в initialize вашего Backbone.Collection.extend на мероприятии add, в котором вы проверяете размер.

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

checkSize: function() { 
    var max = 10; 

    if (this.length > max) { 
     this.reset(this.first(max)); 
    } 
}