Backbone: ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ порядок сортировки ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ

Π‘ΠΎΠ·Π΄Π°Π½Π½Ρ‹ΠΉ Π½Π° 11 Π°ΠΏΡ€. 2011  Β·  12ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ  Β·  Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: jashkenas/backbone

ΠŸΡ€ΠΈΠ²Π΅Ρ‚,

ΠΊΠ°ΠΊ Π»ΡƒΡ‡ΡˆΠ΅ всСго ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ порядок сортировки ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ? ΠΌΠΎΠΉ ΠΊΠΎΠΌΠΏΠ°Ρ€Π°Ρ‚ΠΎΡ€ сортируСт всС ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΏΠΎ Π΄Π°Ρ‚Π΅,
Π½ΠΎ ΠΌΠ½Π΅ Π±Ρ‹ ΠΎΠ½ΠΈ понадобились Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ порядкС. использованиС toArray() ΠΈ reverse() каТСтся довольно нСкрасивым.

учитывая, Ρ‡Ρ‚ΠΎ я Π½Π΅ ΡƒΠΏΡƒΡΠΊΠ°ΡŽ здСсь Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Π°ΠΆΠ½ΠΎΠ΅, я Π±Ρ‹ проголосовал Π·Π° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ ΠΌΠΎΠ΄Π΅Π»ΠΈ магистрали, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ
порядок сортировки вмСстС с ΠΊΠΎΠΌΠΏΠ°Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ.

ΡƒΡ€Π°,
ДэниСл

Π‘Π°ΠΌΡ‹ΠΉ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ

collection.set(collection.models.reverse(), {sort: false});

ВсС 12 ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π›ΡƒΡ‡ΡˆΠΈΠΉ способ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ сортировку ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ - Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· вашСго критСрия сравнСния.

comparator : function(model) {
  return -model.get('date');
}

Как это Π΄ΠΎΠ»ΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ сортировкС Π² Π°Π»Ρ„Π°Π²ΠΈΡ‚Π½ΠΎΠΌ порядкС ΠΏΠΎ строковому Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ?

Если всС, Ρ‡Ρ‚ΠΎ Ρƒ вас Π΅ΡΡ‚ΡŒ, это строковыС значСния, Ρ‚ΠΎ, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Π² Date Ρ€Π°Π½ΡŒΡˆΠ΅?
Π£ мСня Π±Ρ‹Π»Π° такая ΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, ΠΈ это Ρ€Π΅ΡˆΠΈΠ»ΠΎ Π΅Π΅.

comparator : function(model) {
  return -new Date(model.get('date'));
}

Π­Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Π΄Π°Ρ‚ (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ΡΡ Π² числа, Ссли Π²Ρ‹ ставитС ΠΏΠ΅Ρ€Π΅Π΄ Π½ΠΈΠΌΠΈ прСфикс -), Π½ΠΎ Π½Π΅ для ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… строк, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎ Π°Π»Ρ„Π°Π²ΠΈΡ‚Ρƒ.

Π’Ρ‹, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΏΡ€Π°Π²Ρ‹, я ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠ», Ρ‡Ρ‚ΠΎ Π²Ρ‹ всС Π΅Ρ‰Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚Π΅ ΠΎ Π΄Π°Ρ‚Π°Ρ… (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, OP), Π½ΠΎ ваша Π΄Π°Ρ‚Π° Π±Ρ‹Π»Π° ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΉ строкой. Π’ΠΎΠ³Π΄Π° моя ошибка :).

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ вСрсия Backbone (ΠΈ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ мастСр) Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ порядок sort для ΠΊΠΎΠΌΠΏΠ°Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² (вмСсто просто sortBy ), поэтому Π²Ρ‹ смоТСтС ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Π΅Π³ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ способом.

comparator: function(a, b) {
  ...
}

Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ, Ссли Ρƒ вас Π΅ΡΡ‚ΡŒ нСсколько Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² использования ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ порядкС, Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ - Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ? Π’Π°ΡˆΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠΌΠΏΠ°Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΈ сортировки ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ΅, ΠΏΠΎΡ…ΠΎΠΆΠ΅, Π½Π΅Ρ‚ Collection.reverse (), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ быстро ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ направлСния сортировки (ΠΏΠΎ Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°Π½ΠΈΡŽ ΠΈΠ»ΠΈ ΠΏΠΎ ΡƒΠ±Ρ‹Π²Π°Π½ΠΈΡŽ).

@ elwayman02 Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ просто ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ 2 экзСмпляра ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ (ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ Collection # clone)

Π­Ρ‚ΠΎ Π½Π΅ особСнно ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ... возьмСм, ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ, ΠΊΠΎΠ³Π΄Π° коллСкция прСдставляСт собой сСтку Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ я Π±ΡƒΠ΄Ρƒ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… направлСниях. НСт смысла ΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ Π΄Π²Π° Ρ€Π°Π·Π½Ρ‹Ρ… источника Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ. Π”ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ нСобходимости.

Π― сохранил нСсколько ΠΊΠΎΠΌΠΏΠ°Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΈ ΠΏΡ€ΠΈ нСобходимости помСнял ΠΈΡ… мСстами.

var Collection = Backbone.Collection.extend({
  comparators: {
    a: function () {},
    b: function () {}
  },

  setComparator: function (key) {
    this.comparator = this.comparators[key];
    return this;
  }
});
var collection = new Collection();
collection.setComparator('a').sort();
collection.setComparator('b').sort();

Π­Ρ‚ΠΎ Π»ΡƒΡ‡ΡˆΠΈΠΉ ΠΎΠ±Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡƒΡ‚ΡŒ, хотя я Π΄ΠΎ сих ΠΏΠΎΡ€ Π½Π΅ понимаю, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±Ρ…ΠΎΠ΄Π½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ вмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠ°Π³ΠΈΡΡ‚Ρ€Π°Π»ΡŒ просто ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π»Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ reverse ().

Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ

collection.set(collection.models.reverse(), {sort: false});
Π‘Ρ‹Π»Π° Π»ΠΈ эта страница ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ?
0 / 5 - 0 Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³ΠΈ