Backbone.js - Waar komt de waarde van dit argument vandaan?

Ik wist niet zeker hoe ik mijn vraag moest formuleren op een manier die het begrijpelijk zou maken, dus ik heb hieronder een diagram gemaakt. Het voorbeeld is specifiek voor JavaScript en Backbone.js, maar ik neem aan dat dit ook als een algemene programmeervraag kan worden beschouwd.

Ik heb een voorbeeld van een Backbone-verzameling en ik heb moeite om te begrijpen hoe de waarden worden doorgegeven. Ik ga ervan uit dat 'taak' net zo goed elke willekeurige waarde kan zijn, zoals 'taco' of 'paard' en net zo goed werken. Ik vraag me af waar en hoe 'taak' zijn waarde krijgt toegewezen.

Hier is hoe ik naar het probleem kijk en ik heb geprobeerd om het pad van mijn verwarring hieronder te creëren:

enter image description here

Dit is het Taak -model als dat helpt:

var Task = Backbone.Model.extend({
  isComplete: function() {
    return this.get('completed_at') !== null;
  }
});
4
Ha! Blij dat ik kan helpen. :)
toegevoegd de auteur PhillipKregg, de bron
Dat is echt een nuttige kaart!
toegevoegd de auteur Jamund Ferguson, de bron

2 antwoord

De comparator-functie wordt aangeroepen door underscore _. SortBy met array-element als een argument, er is een ton van het maken van objecten en iteratie aan de gang voor wat in essentie neerkomt op een veel snellere native sortering:

someArrayOfTasks.sort( function( taskA, taskB ) {
return taskA.dueDate < taskB.dueDate ? -1 :
       taskA.dueDate > taskB.dueDate ? 1 : 0;
});

Of een eenvoudiger voorbeeld:

[3,2,5,1,4].sort( function(a,b){
return a-b;
});
//[1, 2, 3, 4, 5]

[3,2,5,1,4].sort( function(a,b){
return b-a;
});
//[5, 4, 3, 2, 1]

De vergelijkingsfunctie haalt hier zijn argumenten uit de sorteerfunctie wanneer deze de sorteervolgorde probeert op te lossen, de waarde die u uit de vergelijker retourneert bepaalt in welke volgorde de array is gesorteerd.

I'd suggest normal sort over the backbone sort, as it's 10x faster for me in chrome and easier to understand because the comparator function actually... compares: http://jsperf.com/underscore-sort-vs-normal-sort

1
toegevoegd
Ok, bedankt - Ik dacht er niet over dat de underscore-bibliotheek werd gebeld. En bedankt voor de koppeling met de sorteersnelheid.
toegevoegd de auteur PhillipKregg, de bron

Vergelijkende functie van de verzameling neemt een model als invoer. Ik denk dat je comparators moet schrijven zoals:

function (task){
  return task.get('dueDate');
}

Opmerking: Backbone comparators verschillen van de normale JS array sort comparator!

0
toegevoegd