我在这里遇到一个典型问题,我试图使用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和&来更改树的internalID。时间戳。
我的问题是,如果我的方法是正确的?因为我试图找到一个EXT js API来做到这一点,但我找不到一个。
任何人都可以帮忙。
谢谢。
答案 0 :(得分:1)
我遇到了同样的问题。树不支持具有相同ID的两个记录。
如果您没有可编辑的树面板,则可能不关心ID,因此不应将其包含在模型类中。请记住,idProperty默认为ID字段。如果你不从服务器上把它带进去就没问题。
或者,您可以使用服务器虚假唯一ID,但如果您将数据发送回服务器,则需要处理该数据。