Я создал дерево диджитов и текстовое поле, и я хочу отфильтровать узлы дерева на основе ключевых слов, предоставленных в текстовом поле. Я реализовал решение, предоставленное в другом вопросе, но оно, похоже, не работает. Когда пользователь вводит какое-либо слово в текстовое поле, дерево повторно заполняется одними и теми же данными.Dijit Tree фильтрация и поиск не работают на ObjectStoreModel
Ниже мой код:
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();
});
Смотрите пример кода на JSFIDDLE: http://jsfiddle.net/xLfdhnrf/16/
Дерево и текстовое поле оказывает штраф только поиск не работает , какие-либо предложения? Также почему знак EXPAND (+) показывает с листовыми узлами?
Код отлично подходит для меню одного уровня работы. Когда я добавляю дочерние узлы, он не отображает их, потому что «mayHaveChildren» возвращает false. Однако, если я возвращаю true вместо false, тогда он отображает дочерние узлы, но фильтр работает только для узлов верхнего уровня. Если дочерние узлы могут отображаться и фильтроваться, моя проблема будет решена, и я могу принять ответ. См. Обновленный код здесь: http://jsfiddle.net/xLfdhnrf/26/ Проверьте, вернув «true» в «mayHaveChildren» для отображения дочерних узлов дерева. –
@ asim-ishaq, отредактировал ответ – ben
Обновленный код соответствует всем требованиям. Спасибо за ответ. –