Bazı özel sütunlarla birlikte bir kılavuzum var ve bu sütunu sıralamak istiyorum - bunun içinde görüntülenenlere göre sıralamak istiyorum, ama gerçekten yapamıyorum dataIndex temelli olmayan bir sütun için bir sıralayıcının nasıl tanımlanacağını anla - özel bir model kullanmayı denedim, ancak bunu işe alamadım.İçindekilerle özel sütunları sırala özel js
cevap
Sütunun doSort
yöntemini geçersiz kılabilirsiniz. İşte onun özü. Ayrıca çalışan bir keman oluşturdum (http://jsfiddle.net/cfarmerga/LG5uA/). Keman, bir alanın dize uzunluğunu sıralama özelliği olarak kullanır, ancak elbette kendi özel sıralama mantığınızı uygulayabilirsiniz.
var grid = Ext.create('Ext.grid.Panel',{
//...
columns: [
{ text: 'name', dataIndex: 'name', sortable: true },
{
text: 'Custom',
sortable : true,
dataIndex: 'customsort',
doSort: function(state) {
var ds = this.up('grid').getStore();
var field = this.getSortParam();
ds.sort({
property: field,
direction: state,
sorterFn: function(v1, v2){
v1 = v1.get(field);
v2 = v2.get(field);
return v1.length > v2.length ? 1 : (v1.length < v2.length ? -1 : 0);
}
});
}
}
]
//....
});
Belirttiğiniz kod bloğunu ayarlıyorum ve işe yaramazsa, doğru şeyi aldığımdan emin olmak için çeşitli değişkenleri günlüğe kaydetmesi için konsolu başlattım. Sıralanacak sütunu tıklattığımda doSort yöntemini doğru olarak çağırır. Ancak, 'ds.sort() 'yöntemine koyduğum konsol günlüklerinin hiçbiri hiç çalıştırılmadı, bu yüzden bu yöntemin hiç çalışmadığı sonucuna vardım. Burada neler olduğu hakkında bir fikrin var mı? Ayrıca, API belgelerine göre, ds.sort ([{özellik ...}] olmamalıdır; ' –
' ds.sort'ta konsol.log çağrılarını nasıl ekleyeceğinizden emin değilim. yöntemi bu yöntemi geçersiz kılmıyorsunuz. Sadece 'sorterFn' işlevine' console.log' ekledim ve başarıyla çağrılıyor. –
Üzgünüz, demek istediğim şey buydu. SorterFn: function (bir, iki) var { console.log ('one', one); console.log ('iki', iki); one = one.get (alan); iki = iki.get (alan); v1.length> v2.length değerini döndürüyor mu? 1: (v1.length
Kullanıldığı ediliyor önce verileri dönüştürmek için izin verir Ext.data.Model sınıfı bir dönüştürmek yöntemi yoktur. Ardından, sütundaki bu 'dataIndex' değerini belirtebilir ve normal bir sıralama yapabilirsiniz. Sütun, dönüştürülen değerle sıralanır. Aşağıda örnek bir sadece bir alan (Ana) model ve dönüşüm gelen oluyor ile geçerli:
Ext.define('MyModel', {
extend: 'Ext.data.Model',
fields: [
{name: 'Parent', type: 'string', convert: sortParent},
// other fields...
],
sortParent: function(value, record) {
var ret = record.raw.Parent;
if (ret) {
return ret.Name;
} else {
meta.tdCls = 'invisible';
return record.data.Name;
}
}
});
Bu yaklaşımı denedim, ancak çalışmayı başaramadım.Dönüştürme yöntemini görmüyorum ve sortParent yöntemini nereden arandığından emin değilim. –
Bu keman'a bir göz atın: http://jsfiddle.net/LG5uA/7/ –
@JuanDanielFlores - örneğiniz yerine alternatif verilerle doğru şekilde çalışır, ancak orijinal olarak yayınlandığı gibi, kemanın sıralama iki sütun arasında aynıdır. http://jsfiddle.net/LG5uA/57/, çalışmasının daha iyi gösterilmesini sağlar. –
Ext JS sürümü 5 için, doSort
çıkarıldı, bu yüzden bunu geçersiz olamazdı gibi görünüyor. Bunun yerine, sortchange
olayını dinleme yoluna gittim ve oradan Ext.data.Store.setSorters
yöntemini kullandım. ne bu çözümlerin benim durumumda çalıştı nedeni çünkü ben olduğunu düşünüyorum
// grid class
initComponent: function() {
...
this.on('sortchange', this.onSortChange, this);
},
onSortChange: function(container, column, direction, eOpts) {
// check for dayColumnIndex
if (column && column.dayColumnIndex !== undefined) {
this.sortColumnByIndex(column.dayColumnIndex, direction);
}
},
sortColumnByIndex: function(columnIndex, direction) {
var store = this.getStore();
if (store) {
var sorterFn = function(rec1, rec2) {
var sortValue = false;
if (rec1 && rec2) {
var day1;
var daysStore1 = rec1.getDaysStore();
if (daysStore1) {
day1 = daysStore1.getAt(columnIndex);
}
var day2;
var daysStore2 = rec2.getDaysStore();
if (daysStore2) {
day2 = daysStore2.getAt(columnIndex);
}
if (day1 && day2) {
var val1 = day1.get('value');
var val2 = day2.get('value');
sortValue = val1 > val2 ? 1 : val1 === val2 ? 0 : -1;
}
}
return sortValue;
};
if (direction !== 'ASC') {
sorterFn = function(rec1, rec2) {
var sortValue = false;
if (rec1 && rec2) {
var day1;
var daysStore1 = rec1.getDaysStore();
if (daysStore1) {
day1 = daysStore1.getAt(columnIndex);
}
var day2;
var daysStore2 = rec2.getDaysStore();
if (daysStore2) {
day2 = daysStore2.getAt(columnIndex);
}
if (day1 && day2) {
var val1 = day1.get('value');
var val2 = day2.get('value');
sortValue = val1 < val2 ? 1 : val1 === val2 ? 0 : -1;
}
}
return sortValue;
};
}
store.setSorters([{
sorterFn: sorterFn
}]);
}
}
http://stackoverflow.com/a/25202392/1684254 THe private doSort yöntemi, yukarıdaki gibi ele alındığı gibi sıralama yöntemiyle değiştirilmiştir. –
- 1. Karşılıklı özel tablo sütunları oluşturma
- 2. özel dizim [JS]
- 3. Özel mysql, alan değerine göre sırala
- 4. Listeyi sırala özel bir değer üstte biter
- 5. Python: `key` argümanı kullanılmadan özel sınıfları sırala?
- 6. js: Bazı özel jQuery kullanımı
- 7. ggplot2: özel karakterler içeren sütunları nasıl çizilir?
- 8. Python: Veritabanına özel .mean sütunları nasıl eklenir?
- 9. özel css ve js wordpress'te ana sayfalarda
- 10. Janrain özel js onayı kaydı için
- 11. Özel görünüm/eylem/denetleyici çalışmıyor Yelkenler JS
- 12. Özel js magento eklemek nerede/nasıl
- 13. Esnek: Sırala - Özel bir karşılaştırma yazısı yazılıyor mu?
- 14. Js lodash daha derin alana göre sırala
- 15. İçindekilerle eşleşme php regex
- 16. Özel özel durumumu açılamıyor
- 17. Özel bir özel durum döndürme
- 18. İçindekilerle ilgili meraklı hata iletisi
- 19. İçindekilerle alt klasörleri nasıl düzenlenir
- 20. 'Özel projeyi özel eylem dosyası bulunamadı' özel durumuyla nasıl giderebilirim?
- 21. IOS Özel Anahtar Kartı. Özel klavyede özel karakter nasıl ayarlanır
- 22. Windows 8 için genel özel eklenti Giriş js nesnesini bulamadı
- 23. c3.js kullanarak özel çörek veya pasta grafik oluşturma
- 24. Özel geçerlilik denetleyicisindeki parsleyField. $ Öğeye erişim Parsley JS
- 25. WordPress'te sadece bir sayfaya özel css/js nasıl eklenir?
- 26. Özel şekli nasıl bir daireye dönüştürürüm? CANVAS JS
- 27. kullanıyorum bir Firefox uzantısından özel JS kodu çalıştırmak çalışıyorum
- 28. Özel Cordova eklentisi iOS index.js dosent .js dosyasını tanıyor
- 29. Nakavt js içinde çoklu seçim için özel ciltleme
- 30. js listesinden seçme özel html etiketi nasıl eklenir
: Kod biraz özel, çünkü ben kullanıyorum verilerin aşırı karmaşık, böylece akılda tutmak (Fiddle here) 'dir bir Ext.data.Store yerine bir Pageable Store kullanıyordu. İkinize de teşekkürler, çözümleriniz bir Ext.data.Store kullanırken çalışır. –