Sono relativamente nuovo al dojo e ho visto come datagrid offre una funzionalità di filtro dinamico che riduce le righe visibili in base a ciò che digiti in un input di testo del filtro. Non ho trovato alcun esempio su come farlo con il dgrid. Se può essere fatto, si prega di fornire un esempio o indicarmi una risorsa che offre un tutorial o un esempio. Grazie!È possibile filtrare i dati in un dgrid come è possibile in un datagrid? Se é cosi, come?
risposta
Sì, è possibile. Utilizzare dgrid/OnDemandGrid
e definire la funzione query
che restituirà true
o false
in base alla logica per ogni riga in dojo/store
che alimenta la griglia.
ho preparato un esempio per giocare con a jsFiddle: http://jsfiddle.net/phusick/7gnFd/, quindi non c'è bisogno di spiegare troppo:
la funzione di query:
var filterQuery = function(item, index, items) {
var filterString = filter ? filter.get("value") + "" : "";
// early exists
if (filterString.length < 2) return true;
if (!item.Name) return false;
// compare
var name = (item.Name + "").toLowerCase();
if (~name.indexOf(filterString.toLowerCase())) { return true;}
return false;
};
The Grid :
var grid = new Grid({
store: store,
query: filterQuery, // <== the query function for filtering
columns: {
Name: "Name",
Year: "Year",
Artist: "Artist",
Album: "Album",
Genre: "Genre"
}
}, "grid");
So che questa non è la risposta alla domanda posta e la risposta fornita è magistrale e la usiamo abbastanza.
Tuttavia, questa funzionalità non sembra funzionare bene se si utilizza una TreeGrid (colonne con il plugin "dgrid/tree"). Ho scritto del codice per simulare lo stesso comportamento della risposta accettata con una griglia ad albero. Fondamentalmente si tratta solo di scorrere gli articoli nel negozio e nascondere tutti gli elementi di riga che non corrispondono a nessuna condizione stabilita. Ho pensato di condividerlo nel caso in cui aiuti qualcuno. È piuttosto brutto e sono sicuro che può essere migliorato, ma funziona.
In pratica utilizza lo stesso concetto della risposta di phusick. Hai bisogno di guardare un valore su un TextBox, ma invece di aggiornare la griglia di gioco è fatto chiamare una funzione:
textBox.watch("value", lang.hitch(this, function() {
if (timeoutId) {
clearTimeout(timeoutId);
timeoutId = null;
};
timeoutId = setTimeout(lang.hitch(this, function() {
this.filterGridByName(textBox.get('value'), myGrid);
}, 300));
}));
Ed ecco la funzione:
filterGridByName: function(name, grid){
try {
for (var j in grid.store.data){
var dataItem = grid.store.data[j];
var childrenLength = dataItem.children.length;
var childrenHiddenCount = 0;
var parentRow = grid.row(dataItem.id);
for (var k in dataItem.children){
var row = grid.row(dataItem.children[k].id);
var found = false;
if (dataItem.children[k].name.toLowerCase().indexOf(name.toLowerCase()) != -1){
found = true;
}
if (found){
if (row.element){
domStyle.set(row.element, "display", "block");
}
if (parentRow.element){
domStyle.set(parentRow.element, "display", "block");
}
} else {
childrenHiddenCount++;
// programmatically uncheck any hidden item so hidden items
for (var m in grid.dirty){
if (m === dataItem.children[k].id && grid.dirty[m].selected){
grid.dirty[m].selected = false;
}
}
if (row.element){
domStyle.set(row.element, "display", "none");
}
}
}
// if all of the children were hidden, hide the parent too
if (childrenLength === childrenHiddenCount){
domStyle.set(parentRow.element, "display", "none");
}
}
} catch (err){
console.info("error: ", err);
}
}
- 1. È possibile dividere una stringa su più righe in un file XML? Se é cosi, come?
- 2. Utilizzando LINQ, è possibile generare un oggetto dinamico da un'istruzione Select? Se é cosi, come?
- 3. È possibile disabilitare l'opzione auto-unione in Visual Studio Team System 2008? Se é cosi, come?
- 4. È possibile abilitare TLS v1.2 in Ruby? Se é cosi, come?
- 5. È possibile creare file .mobi con python? se é cosi, come?
- 6. È possibile eseguire la mia app Rails su Heroku con Ruby 1.9.3? Se é cosi, come?
- 7. È possibile aumentare l'altezza delle schede ActionBar rispetto all'altezza ActionBar? Se é cosi, come?
- 8. Posso tingere (nero) un UIKeyboard? Se é cosi, come?
- 9. È possibile visualizzare un messaggio in un datagrid vuoto
- 10. È corretto stampare su stdout o stderr nelle migrazioni di dati Django? Se é cosi, come?
- 11. La FFI può gestire gli array? Se é cosi, come?
- 12. È possibile filtrare un NSArray per classe?
- 13. Possiamo chiamare un metodo statico con un oggetto nullo in Java? Se é cosi, come?
- 14. Posso convertire un file Tex in un file Org equivalente? Se é cosi, come?
- 15. È possibile trovare l'indice attuale in un ciclo perfezionato?
- 16. È C# 6?. (Elvis op) thread safe? Se é cosi, come?
- 17. PHP: puoi usare un array come parte degli argomenti della funzione sprintf? se é cosi, come?
- 18. Può ffmpeg convertire l'audio in PCM raw? Se é cosi, come?
- 19. È possibile avere più di un metodo main() in un programma C#?
- 20. È possibile e come si ottengono dati remoti (ad esempio JSON) in AppleScript?
- 21. È possibile che un processo si elevi dopo l'avvio?
- 22. È possibile associare i dati a un controllo TreeView?
- 23. È possibile filtrare i pacchetti di nuget dalla piattaforma supportata?
- 24. Utilizzando PySerial è possibile attendere i dati?
- 25. In Oracle, è possibile "inserire" una colonna in una tabella?
- 26. È possibile contrassegnare un test come in sospeso in MiniTest?
- 27. In Python, puoi avere delle variabili tra virgolette doppie? Se é cosi, come?
- 28. È possibile associare dati a un metodo in Silverlight?
- 29. È possibile archiviare dati relazionali in hdf
- 30. È possibile stabilire se un oggetto è in esecuzione in un AppDomain diverso?
Grazie phusick! Molto utile! Puoi spiegare la riga: if (~ nome.indexOf (filterString.toLowerCase())) {return true;} – teaman
Anche curioso di sapere perché si aggiunge "" alla fine di filterString. È quello di convertirlo in una stringa? – teaman
Sì, per renderlo una stringa in quanto avevo bisogno di 'length' e' toLowerCase() '. L'operatore _tilde_ o bitewise NOT è più corto e in alcuni browser [più veloce] (http://jsperf.com/indexof-and-tilde/2) rispetto a 'name.indexOf (filterString.toLowerCase())> -1'. Vedi [The Great Mystery of the Tilde (~)] (http://www.joezimjs.com/javascript/great-mystery-of-the-tilde/). – phusick