Полностью стереть дерево диджит (додзё) из памяти и освободить его заполнитель - PullRequest
1 голос
/ 06 марта 2011

Я начинаю с кусочка кода, чтобы описание проблемы стало понятным.

  1. У меня есть HTML-код:

    <div id="center" class="column" dojoType="dijit.layout.TabContainer">

     <div id="first" dojoType="dijit.layout.ContentPane" title="first"  selected="true">
    
        <div id="first_content"></div>
    
    </div>
    
     <div id="second" dojoType="dijit.layout.ContentPane" title="second">
    
         <div id="second_content"></div>
    
     </div>
    

    </div>

  2. У меня есть функция javascript для загрузки деревьев диджита в HTML:

функция загрузки ()

{
//load data
dojo.xhrGet(firsthierarchy("first_content", "file1.json"));
dojo.xhrGet(secondhierarchy("second_content", "file2.json"));
}

function firsthierarchy(node, url){
return {
url: url,
node: dojo.byId(node),
handleAs: "json",
load: loadfirsthierarchy
};
}

function secondhierarchy(node, url){
return {
url: url,
node: dojo.byId(node),
handleAs: "json",
load: loadsecondhierarchy
};
}

function loadfirsthierarchy(data, xhr)
{
if(xhr.args.node)
{
store1 = new dojo.data.ItemFileWriteStore({data: data});
treeModel1 = new dijit.tree.ForestStoreModel({
store: store1,
query: {
"type": "continent"
},
rootId: "root",
rootLabel: "Continents",
childrenAttrs: ["children"]
});
tree1 = new dijit.Tree({ 
        model: treeModel1, 
    },xhr.args.node.id);
}
}

function loadsecondhierarchy(data, xhr)
{
if(xhr.args.node)
{
store2 = new dojo.data.ItemFileWriteStore({data: data});
treeModel2 = new dijit.tree.ForestStoreModel({
store: store2,
query: {
"type": "continent"
},
rootId: "root",
rootLabel: "Continents",
childrenAttrs: ["children"]
});

tree2 = new dijit.Tree({ 
model: treeModel2, 
},xhr.args.node.id);
}
}

Все вышеперечисленные функции работают нормально. Теперь я хочу иметь функцию сброса, чтобы она могла стирать существующие деревья в div «first_content» и «second_content» и загружать эти div с новыми деревьями с новым содержимым. Например:

функция сброса ()

{
// here I want to completely wipe out the exiting trees in all of the dojo contentpanes.
// And I want to load the contentpanes with entire new set of data.
// Maybe like :
// dojo.xhrGet(firsthierarchy("first_content", "file3.json"));
// dojo.xhrGet(secondhierarchy("first_content", "file4.json"));
}

Понятия не имею, как реализовать функцию сброса. Не могли бы вы дать мне подсказку.

1 Ответ

0 голосов
/ 07 марта 2011

Сохраните ссылки на дерево, treeModel и store, затем определите свою функцию следующим образом:

reset: function() {
    myTree.destroyRecursive();
    myTreeModel.destroyRecursive(); // I'm not 100% sure you need this, destroying the tree may do this automatically
    delete myStore
}

Это должно сработать

Я бы сделал так, чтобы создатьмодуль, использующий dojo.provide с именем TreeWrapper(), который обрабатывает жизненный цикл дерева (извлечение данных, создание дерева, уничтожение дерева).Этот модуль-обертка затем имеет функцию сброса, описанную выше, и может содержать ссылки на все различные переменные.

Вам также необходимо отслеживать любые dojo.subscribe, которые у вас есть для дерева, и отписываться от них.

...