Backbone: ترتيب الفرز العكسي للنماذج في المجموعة

تم إنشاؤها على ١١ أبريل ٢٠١١  ·  12تعليقات  ·  مصدر: jashkenas/backbone

مهلا،

ما هي أفضل طريقة لعكس ترتيب المجموعة؟ يقوم مقارني بفرز جميع النماذج حسب التاريخ ،
لكني سأحتاجهم بترتيب عكسي. استخدام toArray() و reverse() يبدو قبيحًا جدًا.

نظرًا لأنني لا أفقد شيئًا مهمًا هنا ، فسأصوت لسمة نموذج العمود الفقري لتعيين
ترتيب الفرز مع المقارنة.

في صحتك،
دانيال

question

التعليق الأكثر فائدة

يمكنك أيضا أن تفعل

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

ال 12 كومينتر

أفضل طريقة لعكس نوع المجموعة هي إرجاع قيمة سالبة من معيار المقارنة الخاص بك.

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

كيف يفترض أن يعمل هذا عند الفرز أبجديًا على قيمة سلسلة؟

إذا كان كل ما لديك هو قيم سلسلة ، فربما يتم التحويل إلى تاريخ سابق؟
كان لدي نفس المشكلة وهذا حلها.

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

يعمل هذا فقط مع التواريخ (التي يتم تحويلها إلى أرقام عندما تسبقها بـ -) ، ولكن ليس مع السلاسل العشوائية التي تريد فرزها أبجديًا.

أنت بالطبع على حق ، لقد افترضت أنك ما زلت تتحدث عن التواريخ (مثل OP) ، لكن تاريخك كان عبارة عن سلسلة قابلة للتحويل. خطأي ثم :).

الإصدار التالي من Backbone (والماجستير الحالي) سيدعم sort الطلبات للمقارنات (بدلاً من sortBy ) ، لذا ستتمكن من تعريفه بالطريقة المعتادة.

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

ماذا تفعل إذا كان لديك حالات استخدام متعددة لنفس المجموعة ، بعضها يجب أن يظهر بترتيب واحد والآخر بالعكس؟ يمكن للمقارن وتطبيقات الفرز اختيار اتجاه واحد فقط أو آخر ، ولا يبدو أن هناك Collection.reverse () لتتمكن من تبديل اتجاهات الفرز بسرعة (تصاعديًا مقابل تنازليًا).

@ elwayman02 يمكنك فقط الاحتفاظ

هذا ليس مفيدًا بشكل خاص ... خذ على سبيل المثال الموقف الذي تمثل فيه المجموعة شبكة من البيانات سأقوم بفرزها بشكل متكرر في اتجاهات متعددة. ليس من المنطقي محاولة الاحتفاظ بمصدرين مختلفين للبيانات والتبديل بينهما. يجب أن يكون هناك كائن بيانات واحد نتعامل معه حسب الحاجة.

لقد قمت بتخزين مقارنات متعددة في مجموعة ، وقمت بتبديلها حسب الحاجة.

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

هذا حل أفضل ، على الرغم من أنني ما زلت لا أفهم سبب ضرورة وجود حل بديل بدلاً من دعم العمود الفقري ببساطة طريقة عكسية.

يمكنك أيضا أن تفعل

collection.set(collection.models.reverse(), {sort: false});
هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات