स्ट्रिंग कॉन्सटेनेशन आरोही क्रम में एकाधिक फ़ील्ड को सॉर्ट करते समय ठीक काम करता है, लेकिन यह मेरे लिए काम नहीं करता क्योंकि 1) मुझे प्रति फ़ील्ड एसी/desc का समर्थन करना था और 2) कुछ फ़ील्ड संख्या फ़ील्ड थे (यानी, मुझे 10 चाहिए अगर यह चढ़ाई हो तो 2 के बाद आना)। तो, नीचे एक तुलनित्र समारोह मैं इस्तेमाल किया था और मेरी जरूरतों के लिए ठीक काम किया। यह मान लिया गया है रीढ़ की हड्डी संग्रह एक चर 'sortConfig' है, जो क्षेत्र का नाम और क्रम दिशा सॉर्ट साथ JSON ऑब्जेक्ट की एक सरणी है के साथ सौंपा गया है। उदाहरण के लिए,
{
"sort" : [
{
"field": "strField",
"order": "asc"
},
{
"field": "numField",
"order": "desc"
},
...
]
}
संग्रह करने के लिए 'sortConfig' के रूप में सौंपा ऊपर JSON ऑब्जेक्ट के साथ
, नीचे समारोह बैकबोन तरह strField से आरोही क्रम में पहले तो तरह numField अवरोही क्रम, आदि तो में कर देगा, कोई सॉर्ट क्रम निर्दिष्ट किया जाता है, यह डिफ़ॉल्ट रूप से आरोही क्रमबद्ध करता है। यदि आप उतरते और कुछ क्रम में क्रमबद्ध करने की जरूरत है
multiFieldComparator: function(one, another) {
// 'this' here is Backbone Collection
if (this.sortConfig) {
for (var i = 0; i < this.sortConfig.length; i++) {
if (one.get(this.sortConfig[i].field) > another.get(this.sortConfig[i].field)) {
return ("desc" != this.sortConfig[i].order) ? 1 : -1;
} else if (one.get(this.sortConfig[i].field) == another.get(this.sortConfig[i].field)) {
// do nothing but let the loop move further for next layer comparison
} else {
return ("desc" != this.sortConfig[i].order) ? -1 : 1;
}
}
}
// if we exited out of loop without prematurely returning, the 2 items being
// compared are identical in terms of sortConfig, so return 0
// Or, if it didn't get into the if block due to no 'sortConfig', return 0
// and let the original order not change.
return 0;
}
2012 की शुरुआत के बाद से सॉर्ट-स्टाइल तुलनाकर्ताओं के लिए समर्थन है। बस 2 तर्क स्वीकार करें और -1, 0 या 1 लौटें। Https: // github।com/documentcloud/backbone/commit/6b3ff7b0359510917d9ead8c8e16a7457eef05ef – geon