1

私のWebアプリでは、dynatreeを使用して、ドラッグアンドドロップ(階層の変更の場合)およびカスタムリンク(アイテムのステータスの変更の場合)を使用して編集できるデータのツリーを表示しています。リンクをドロップまたはクリックした直後に、すべての変更がデータベースに保存されます。

いずれの状況でもツリーとそのバックエンドモデルが同期しなくなるのを防ぐために、変更のたびにツリーを完全に更新したいと思います。

私はこのようにそれを行うことができます:DynaTreeをリロード/リフレッシュ/再起動する方法は?。しかし、これを行うには、ツリー全体を破棄して再初期化する必要があり、そうしている間にすべてのノードが崩壊します。

すべてのツリーアイテムを反復処理したり、存在しなくなったアイテムを破棄したり、新しいアイテムを追加したり、変更したアイコンのタイトル/アイコン/データを変更したりする更新オプションが欲しいのですが、ドキュメントにこのようなものが見つかりません。

これを達成するためのトリックはありますか?多分隠された機能、または回避策?

インスピレーションをありがとう、ピーター

4

1 に答える 1

2

バッキングJavaScriptデータオブジェクトに従ってツリー(またはその一部)を更新するための組み込み機能がないように見えるため(少なくとも私は見つけることができませんでした)、ツリー(またはそれの枝):

EDIT : メソッドの以前の実装は、子が追加または削除されたときに機能しませんでした。すべての子ノードを破棄し、すべての子ノードを再度追加するように更新しました。

  function updateNodeRecursively(node, data, includeSelf) {
    if(includeSelf == undefined) includeSelf = true;
    if(includeSelf) node.data = data;
    node.removeChildren();
    if(data.children) {
      for(var i=0; i<data.children.length; i++) {
        var cnode = node.addChild(data.children[i]);
        updateNodeRecursively(cnode, data.children[i],false)
      }
    }

dataJavaScript からツリーを初期化するときに使用されるのと同じ構造を使用します。最初の引数として渡すノードに応じて、ツリーを完全または部分的に更新できます。

于 2012-09-17T13:57:06.030 に答える