2012-02-02 25 views
6

正常に移動されなかったフォルダノードだけをロールバックする方法を理解しようとしています。以下のコードは私がしようとしているものの例です。問題は、いくつかのフォルダを選択して別のフォルダに移動したときに発生します。ディレクトリの1つが移動に失敗した場合、元の親に戻すことができます。 残念ながら$.jstree.rollback(data.rlbk);は、以前の場所に選択されたすべてのフォルダをロールバックします。jstreeで移動できなかったノードをロールバックする方法

$("#tree").jstree({...}).bind("move_node.jstree", function (e, data) { 
    // process all selected nodes directory 
    data.rslt.o.each(function (i) { 
     // Send request. 
     var move = $.parseJSON($.ajax({ 
      url: "./jstree.php", 
      type: 'post', 
      async: false, 
      data: { 
       operation: "move_dir", 
       .... 
      } 
     }).responseText); 
     // When everything's ok, the reponseText will be {success: true} 
     // In all other cases it won't exist at all. 
     if(move.success == undefined){ 
      // Here I want to rollback the CURRENT failed node. 
      // $.jstree.rollback(data.rlbk); will rollback all 
      // of the directories that have been moved. 
     } 
    } 
}); 

これを行う方法はありますか?

答えて

1

以前はjstreeを使ってみましたが、自分のコードで使用していません。その結果、コードが正しくない可能性がありますが、コンセプトは正しいはずです。

コードに基づいて、サーバー側で移動操作を実行していて、その結果を反映するようにツリーを更新するように見えます。

jsTreeのドキュメントに基づいて、ノードの更新をコミットできず、最後のコミットにロールバックできないように見えます。

不要な変更のみをロールバックするのではなく、ツリーをロールバックして(すべての変更)、後で移動を実行できます。

以下のコードを理解しやすくするために、 "if"ステートメントの条件で "wasTriggeredByCode"が設定または参照されている行を使わずに、そのコードを読み込む(またはコピーを作成する)ことができます。

+0

残念ながら、私が必要とするすべてを持っていた一から同じようなjqueryプラグインを既に書いているので、私はこの答えを受け入れることができません。申し訳ありませんが、遅れて返答しましたが、私は人々がアップボーンをしていることを知っています。私はこの質問を開いているので誰かが@DaveFの答えを見つけたら助けになりますので、アップしてください! – tftd

+0

@tftdもちろん、気にしないなら、あなたのプラグインを共有できれば助けになります。 – alejosoft

関連する問題