Ho creato un albero di dijit e una casella di testo e voglio filtrare i nodi dell'albero in base alle parole chiave fornite nella casella di testo. Ho implementato la soluzione fornita in un'altra domanda ma non sembra funzionare. Quando l'utente inserisce una parola nella casella di testo, l'albero viene ripopolato con gli stessi dati.Filtraggio dell'albero di dijit e ricerca non funzionante su ObjectStoreModel
seguito è il mio codice:
require(["dijit/form/TextBox","dojo/store/Memory","dijit/tree/ObjectStoreModel","dijit/Tree","dojo/domReady!"], function(TextBox, MemoryStore, ObjectStoreModel, Tree) {
var searchBox = new TextBox({
placeHolder: "[ Type here to search ]"
}, "searchBox");
searchBox.on("blur", function() {
tree.model.store.query({
name: "*" + searchBox.value + "*"
});
/*the below approach has been taken from the other question*/
tree.model.store.clearOnClose = true;
/*tree.model.store.close(); //This is not working?*/
delete tree._itemNodesMap;
tree._itemNodesMap = {};
tree.rootNode.state = "UNCHECKED";
delete tree.model.root.children;
tree.model.root.children = null;
tree.rootNode.destroyRecursive();
tree.model.constructor(tree.model)
tree.postMixInProperties();
tree._load();
});
var store = new MemoryStore({
idProperty: "id",
getChildren: function(object) {
return this.query({
parent: object.id
});
},
data: [{
id: "0",
name: "Root Node",
parent: null
}, {
id: "1",
name: "File",
parent: "0"
}, {
id: "2",
name: "System",
parent: "0"
}, {
id: "3",
name: "Diagnosis",
parent: "0"
}, {
id: "4",
name: "Management",
parent: "0"
}]
});
var model = new ObjectStoreModel({
store: store,
query: {
id: "0"
}
});
var tree = new Tree({
model: model,
showRoot: false
}, "treeDiv");
tree.startup();
});
vedere il codice esempio a JSFIDDLE: http://jsfiddle.net/xLfdhnrf/16/
L'albero e testo sta rendendo bene solo ricerca non sta funzionando , eventuali suggerimenti? Inoltre, perché il segno EXPAND (+) viene visualizzato con i nodi foglia?
Il codice funziona bene per il menu unico livello. Quando aggiungo i nodi figli, non li visualizza perché "mayHaveChildren" restituisce false. Tuttavia, se restituisco true invece di false, visualizza i nodi figlio ma il filtro funziona solo per i nodi di livello superiore. Se i nodi figli possono essere mostrati e filtrati, il mio problema si risolverà e posso accettare la risposta. Vedere il codice aggiornato qui: http://jsfiddle.net/xLfdhnrf/26/ Controllare restituendo "true" in "mayHaveChildren" per visualizzare i nodi figlio dell'albero. –
@ asim-ishaq, ha modificato la risposta – ben
Il codice aggiornato soddisfa tutti i requisiti. Grazie per la risposta. –