2013-04-22 1 views
2

У меня типичная проблема здесь, я пытаюсь реплицировать структуру папок на сервере с помощью TreePanel. Сценарий заключается в том, что у меня есть папки, в которых есть повторные дети. то есть имя файла/папки совпадает с именем Node id. Когда я пытаюсь развернуть и свернуть, родитель не может сопоставить 2 детям, а раздвоение создает дубликаты папок.Развернуть и свернуть Ext js treepanel некорректное поведение для повторяющихся листовых узлов

кода перед добавлением узла, я расширил дерево, как,

Ext.define("my.widget.ContentTree", 
     { 
      extend: "Ext.tree.Panel", 
      alias: "widget.my_content_tree", 

...

 // beforeappend event required for node initialization 
       this.store.on("beforeappend", onBeforeAppendNode, this); 
       this.store.on("append", onAppendNode, this); 

И эта строка коды логики перед добавлением узла.

function onBeforeAppendNode(parent, newNode) { 
    /* ext js expands & collapses the tree w.r.t internalId. This Id is by   
       default set to the node ID. Appending the parent id to the child with  
      additonal timestamp ensures that there cannot be duplicate IDS 
    No adverse effects if the internal ids are changed. its neither persisted 
      nor any state is maintained w.r.t to internal ID.*/ 

    // Important Line Start 
    if(parent!=null) 
      newNode.internalId=newNode.internalId+"_"+parent.get("id")+"_"+Math.round(new  
      Date().getTime()) ; 
// Important Line End 
    var nid = newNode.get("id"); 
... 

Моя логика в том, что я изменяю internalID дерева, добавляя его с родительским идентификатором & метку времени.

Мой вопрос: если мой подход верен? потому что я пытаюсь найти EXT js API, который делает это, но я не смог найти его.

Может ли кто-нибудь помочь.

спасибо.

ответ

1

Я столкнулся с тем же вопросом. Дерево не поддерживает две записи с идентичными идентификаторами.

Если у вас нет редактируемой панели деревьев, вам могут не нравиться идентификаторы, и поэтому не следует включать ее в класс модели. Помните, что idProperty по умолчанию для поля ID. Если вы не введете его с сервера, все будет в порядке.

В качестве альтернативы вы можете иметь уникальные идентификаторы сервера, но если вы когда-либо отправляете свои данные на сервер, вам нужно будет это обработать.

+0

Спасибо, я тоже думал точно так же. Планирование изменения класса модели для лучшей ремонтопригодности :). Спасибо. – chaosguru

Смежные вопросы