2012-04-09 9 views
1

Nehmen wir an, ich habe eine Sammlung im Backbone und ich möchte in der Lage sein, die vorherigen und nächsten Elemente für ein bestimmtes Element zu finden. Bitte gehen Sie davon aus, dass Elemente dynamisch gelöscht und hinzugefügt werden können.Die nächsten und vorherigen Elemente in backbone.js holen

var MyModel=Backbone.Model.extend({ 
nextElement: function(){ 
//???? 
}, 
previousElement:function(){ 
//????? 
} 
}); 

var MyCollectionType=Backbone.Collection.extend({ 
model:MyModel; 
}); 
var collection=new MyCollectionType 
+0

Wie ein Model-Iterator? – DashK

+3

Sollten Sie die Sammlung nicht nach Informationen fragen? –

+0

Es wäre wahrscheinlich besser, es auf die Sammlung zu setzen. Aber wenn Sie etwas Kleines schreiben, kann es in beide Richtungen gehen. – Joe

Antwort

13

Wenn ein Modell zu einer Sammlung hinzugefügt wird, wird die collection Eigenschaft zum Modell hinzugefügt, die die Sammlung verweist es in. Sie diese Eigenschaft in den Methoden und next previousElement verwenden kann.

var MyModel = Backbone.Model.extend({ 
    initialize: function() { 
    _.bindAll(this, 'nextElement', 'previousElement'); 
    }, 

    nextElement: function() { 
    var index = this.collection.indexOf(this); 
    if ((index + 1) === this.collection.length) { 
     //It's the last model in the collection so return null 
     return null; 
    } 
    return this.collection.at(index + 1); 
    }, 

    previousElement: function() { 
    var index = this.collection.indexOf(this); 
    if (index === 0) { 
     //It's the first element in the collection so return null 
     return null; 
    } 
    return this.collection.at(index - 1); 
    } 
} 

Allerdings scheint es, dass nextElement und previousElement Anliegen sind die Sammlung das Modell haben und nicht sollte. Haben Sie darüber nachgedacht, diese Funktionen eher auf die Sammlung als auf das Modell zu setzen?

+3

Guter Code, aber sollten nextElement und previousElement nicht Teil der Kollektion sein und nicht das Modell? –

+1

@LarryBattle Genau, deshalb habe ich meine Antwort bearbeitet und die gleichen Vorschläge enthalten – Paul

0

Es wurde als Rückgrat Thema diskutiert

https://github.com/jashkenas/backbone/issues/136

linssen

es so etwas wie diese sein können Sie können immer dieses Problem umgehen, eine neue Modell-Methode:

getRelative: function(direction) { 
    return this.collection.at(this.collection.indexOf(this) + direction); 
} 

Wenn Sie also -1 übergeben, erhalten Sie den vorherigen und 1 den nächsten. Es wird -1 zurückgeben, wenn es nichts findet.

Verwandte Themen