2

我在这里有一个典型的问题,例如,我正在尝试使用 TreePanel 在服务器上复制文件夹结构。情况是我有一些文件夹有重复的孩子。也就是说,文件/文件夹名称相同,即Node id. 当我尝试展开和折叠时,父级无法映射到 2 个子级,并且展开正在创建重复文件夹。

附加节点之前的代码是,我已经扩展了树,

 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");
...

我的逻辑是我通过附加父 ID 和时间戳来更改树的内部 ID。

我的问题是,如果我的方法是正确的?因为我试图找到一个执行此操作的 EXT js API,但我找不到一个。

任何人都可以请帮忙。

谢谢你。

4

1 回答 1

1

我遇到了同样的问题。树不支持具有相同 ID 的两条记录。

如果您没有可编辑的树面板,那么您可能不关心 ID,因此不应将其包含在您的模型类中。请记住,idProperty 默认为 ID 字段。如果你不把它从服务器带进来就可以了。

或者,您可以使用服务器伪造的唯一 ID,但如果您曾经将数据发送回服务器,则需要进行处理。

于 2013-04-23T00:25:30.690 回答