ここで、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を見つけようとしていますが、見つけることができなかったからです。
誰でも助けてください。
ありがとうございました。