jQuery zTree非同期ローディング追加サブノード重複問題
zTree概要
zTreeはjQueryによる多機能「ツリープラグイン」です。優れた性能、柔軟な配置、多機能の組み合わせがzTreeの最大の利点です。
zTreeはオープンソース無料のソフトウェア(MITライセンス)です。zTreeに興味があるなら、またはzhTreeを援助して発展させたいなら、寄付してもいいです。 zTree v 3.0はコアコードを機能に従って分割しました。不要なコードは をロードしなくてもいいです。は遅延負荷技術を採用しています。万以上のノードは簡単にロードしています。IE 6の下でも基本的に秒殺ができます。 は、IE、FireFox、Chrome、Opera、Safariなどのブラウザ に対応しています。はJSONデータ をサポートしています。は、静的およびAjax非同期ローディングノードデータ をサポートする。任意の皮膚の交換/カスタムアイコン(cssに依存) をサポートします。は極めて柔軟なcheckboxまたはradio選択機能 をサポートしています。は、様々なイベント応答応答を提供する 。フレキシブル編集機能(増減/削除/変更/検索)、任意にノードをドラッグしてもいいです。 は、一つのページ内で複数のTreeのインスタンス を同時に生成することができる。シンプルなパラメータ構成で、柔軟で多様な機能を実現します。
原始的な問題
方法1
将
最善の方法
このように面倒をかけなくてもいいですよね?先日、似たような質問に答えました。
1、サブノードを追加すると、直接ajaxからバックグラウンドにデータを保存し、successイベントを捕獲する。
2、ajax success時に、treeNode.zAsync属性を利用して、この親ノードが非同期的なロードを行ったかどうかを知ることができます。falseの場合は直接reAsyncChild Nodes更新します。trueの場合はaddNを利用します。
以上は小编が绍介したjQuery zTreeの非同期ローディングにサブノードを追加して问题を缲り返すので、皆さんに助けてほしいです。もし何か疑问があれば、メッセージをください。小编はすぐに皆さんに返事します。ここでも私たちのサイトを応援してくれてありがとうございます。
zTreeはjQueryによる多機能「ツリープラグイン」です。優れた性能、柔軟な配置、多機能の組み合わせがzTreeの最大の利点です。
zTreeはオープンソース無料のソフトウェア(MITライセンス)です。zTreeに興味があるなら、またはzhTreeを援助して発展させたいなら、寄付してもいいです。
原始的な問題
// ,
function addNode(event) {
rMenu.css({ "visibility": "hidden" });
var treeNode = zTree.getSelectedNodes()[0];
var pid;
var nodeName;
var treelevel;
if (!treeNode && event.target.tagName.toLowerCase() != "button" && $(event.target).parents("a").length == 0) {
//
pid = 0;
treeNode = null;
treelevel = 1;
} else if (treeNode) {
//
pid = treeNode.id;
treelevel = 2;
}
$.post(
"AddNode.action",
{ type: treelevel, id: pid },
function(nodeIdAndName) {
var params = /([^\|]+)\|([^\|]+)/.exec(nodeIdAndName);
if (!((!treeNode && event.target.tagName.toLowerCase() != "button" && $(event.target).parents("a").length == 0) || treeNode.open)) {
zTree.expandNode(treeNode, true);
}
treeNode = zTree.addNodes(treeNode, { id: params[1], pid: pid, isParent: "true", name: params[2], editable: "true", treelevel: treelevel });
});
}
元々サブノードを直接追加する場合、親ノードが展開していない場合、同じサブノードを2つ追加します。その後、私は親ノードが展開されているかどうかを判断しましたが、親ノードが展開すれば、同じサブノードが2つ追加されます(初めての場合)、この問題はどう解決しますか?方法1
将
if (!((!treeNode && event.target.tagName.toLowerCase() != "button" && $(event.target).parents("a").length == 0) || treeNode.open)) {
zTree.expandNode(treeNode, true);
}
treeNode = zTree.addNodes(treeNode, { id: params[1], pid: pid, isParent: "true", name: params[2], editable: "true", treelevel: treelevel });
せいにする
if(!treeNode && event.target.tagName.toLowerCase() != "button" && $(event.target).parents("a").length == 0)
{
treeNode = zTree.addNodes(treeNode, { id: params[1], pid: pid, isParent: "true", name: params[2], editable: "true", treelevel: treelevel });
}
else if(treeNode.open)
{
if(treeNode.isParent)
{
zTree.reAsyncChildNodes(treeNode, "refresh");
}
else
{
treeNode.isParent=true;
zTree.reAsyncChildNodes(treeNode, "refresh");
}
}
else
{
zTree.expandNode(treeNode, true);
treeNode = zTree.addNodes(treeNode, { id: params[1], pid: pid, isParent: "true", name: params[2], editable: "true", treelevel: treelevel });
}
問題は解決できますが、最適化はありますか?修正したコードの分類が多すぎると思います。 最善の方法
このように面倒をかけなくてもいいですよね?先日、似たような質問に答えました。
1、サブノードを追加すると、直接ajaxからバックグラウンドにデータを保存し、successイベントを捕獲する。
2、ajax success時に、treeNode.zAsync属性を利用して、この親ノードが非同期的なロードを行ったかどうかを知ることができます。falseの場合は直接reAsyncChild Nodes更新します。trueの場合はaddNを利用します。
if ((!treeNode && event.target.tagName.toLowerCase() != "button" && $(event.target).parents("a").length == 0) || treeNode.zAsync)
treeNode = zTree.addNodes(treeNode, { id: params[1], pid: pid, isParent: "true", name: params[2], editable: "true", treelevel: treelevel });
else
zTree.reAsyncChildNodes(treeNode, "refresh");
締め括りをつける以上は小编が绍介したjQuery zTreeの非同期ローディングにサブノードを追加して问题を缲り返すので、皆さんに助けてほしいです。もし何か疑问があれば、メッセージをください。小编はすぐに皆さんに返事します。ここでも私たちのサイトを応援してくれてありがとうございます。