Utworzono drzewo dijit i pole tekstowe i chcę filtrować węzły drzewa na podstawie słów kluczowych podanych w polu tekstowym. Zaimplementowałem rozwiązanie dostarczone w innym pytaniu, ale wydaje się, że nie działa. Gdy użytkownik wprowadzi jakieś słowo w polu tekstowym, drzewo zostanie ponownie wypełnione tymi samymi danymi.Filtrowanie drzewa Dijit i wyszukiwanie nie działa na ObjectStoreModel
Po to mój kod:
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();
});
Zobacz przykładowy kod w JSFIDDLE: http://jsfiddle.net/xLfdhnrf/16/
drzewo i pole tekstowe jest świadczenie porządku tylko wyszukiwarka nie działa , jakieś sugestie? Również dlaczego znak EXPAND (+) wyświetla się z węzłami liści?
Kod działa poprawnie na poziomie pojedynczego menu. Kiedy dodaję węzły potomne, to ich nie wyświetla, ponieważ "mayHaveChildren" zwraca false. Jednak jeśli zwrócę true zamiast false, wyświetla węzły potomne, ale filtr działa tylko dla węzłów najwyższego poziomu. Jeśli węzły podrzędne mogą być wyświetlane i filtrowane, mój problem zostanie rozwiązany i mogę zaakceptować odpowiedź. Zobacz zaktualizowany kod tutaj: http://jsfiddle.net/xLfdhnrf/26/ Sprawdź, zwracając "true" w "mayHaveChildren", aby wyświetlić węzły potomne drzewa. –
@ asim-ishaq, zredagowano odpowiedź – ben
Zaktualizowany kod spełnia wszystkie wymagania. Dziękuję za odpowiedź. –