Скажем, если у вашей модели есть запрос `{type: 'continent'} - то есть любые элементы с этим свойством являются элементами верхнего уровня, то следующее расширение модели будет отслеживать изменения и обновлять представление дерева
var dataStore = new ItemFileWriteStore( { ... });
new Tree({
store: dataStore,
model: new ForestModel({
onNewItem: function(item, parentInfo){
if(this.store.getValue(item, 'type') == 'continent'){
this._requeryTop();
}
this.inherited(arguments);
}
}
});
Это, в свою очередь, должно вызвать childrenChanged
в дереве и обновлять его каждый раз, когда добавляется новый элемент.
См. модель ссылки
В качестве дополнения, если добавленный элемент не является элементом верхнего уровня, немедленное обновление должно выполняться с этим оператором. parent
- это триод, в который был добавлен элемент к children
.
tree._collapseNode(parent);
parent.state = 'UNCHECKED';
tree._expandNode(parent);
Более или менее «стандартное» обновление дерева может быть достигнуто следующим образом. Я думаю, что причина не добавлена в базовую реализацию, потому что это нарушит связь с функциями DnD на дереве
dojo.declare("My.Tree", [dijit.Tree], {
// Close the store? (So that the store will do a new fetch()).
reloadStoreOnRefresh : true,
update: function() {
this.model.store.clearOnClose = this.reloadStoreOnRefresh;
this.model.store.close();
// Completely delete every node from the dijit.Tree
delete this._itemNodesMap;
this._itemNodesMap = {};
this.rootNode.state = "UNCHECKED";
delete this.model.root.children;
this.model.root.children = null;
// Destroy the widget
this.rootNode.destroyRecursive();
// Recreate the model, (with the model again)
this.model.constructor(this.model)
// Rebuild the tree
this.postMixInProperties();
this._load();
}
}
);