私が次のことをするとき
$('#tree').dynatree("option","initAjax",{url:"http://google.com"});
dynatreeに現在のツリーデータを忘れて、代わりに指定されたURLからの新しいデータをリロードしてほしい。しかし、デフォルトではそれを行わないことがわかりました。
ありがとう。
私が次のことをするとき
$('#tree').dynatree("option","initAjax",{url:"http://google.com"});
dynatreeに現在のツリーデータを忘れて、代わりに指定されたURLからの新しいデータをリロードしてほしい。しかし、デフォルトではそれを行わないことがわかりました。
ありがとう。
tree.reload()
メソッドを見てください、それはあなたが求めていることをするはずです。
こちらのドキュメントを参照してください:http ://wwwendt.de/tech/dynatree/doc/dynatree-doc.html#h8.2
ドキュメントと同様に、ツリーはツリーの内部描画であり、getTreeコマンドを呼び出すことで取得できます。$("#node").dynatree("getTree")
tree.reload();
Ajax のように動的にロードされるデータ用です。ul/li リストを使用していて、ツリーをリロードする必要がある場合は
、通常のダイナツリー作成コードの$("#tree").dynatree("destroy");
前に次のことを行う必要があります。destroy
パラメータは文書化されていません。
関数の初期化:
function InitTree() {
$("#tree3").dynatree({
(...init params...)
});
}
InitTree();
データをリロードするには、次を呼び出します。
$("#tree3").dynatree("destroy");
InitTree();
この質問はTrying to reload/refresh dynatree with new dataの複製です
私のソリューションでは、などの回り道は必要ありませんempty()
。destroy()
考えてみてください。Dynatree を作成するときに、使用する必要がある設定のディクショナリを指定します。ただし、これは構成辞書であるため、一部のパラメーターが変数であり、クリックなどによって変更されても再評価されません。したがって、これを解決し、DOM の削除や再作成などの高価な操作を回避するために、Dynatree 開発者が考える方法でそれを行います。これは意図されています (ただし、AJAX/JSON の例では明確に文書化されていません):
//The HTML:
<input name="filter" id="checkbox" type="checkbox" value="X">Checkme<br>
<label id="mylabel"></label>
$("#checkbox").click(function() {
$("#mylabel").text($(this).is(":checked"))
$("#tree").dynatree("option", "initAjax", {
url: "myurl/myphp.php",
data: {
myparameter: $("#checkbox").is(":checked").toString()
}
});
$("#tree").dynatree("getTree").reload();
});
#tree
この例では、ボタンがクリックされるたびに構成を設定し、ツリーをリロードします。
Dynatree をリロードする場合は、最初にノードを削除します。
$("#tree").dynatree("getRoot").removeChildren();
最初は、initAjax で「オプション」を使用して ajax 呼び出しを行っていました。ただし、リロード後にサーバーから空の応答があった場合に備えてエラー メッセージを表示する必要があったため、通常の ajax ルートに進むことにしました。ajax 呼び出しを行い、応答を取得してから、ツリーをリロードします。だから私は私のjavascriptファイルでこのようにしました
var myObj = {getDynaTree :function(){
//Refresh the dynatree
$("#dynaTree").dynatree("option", "children", null);
$.ajax({
url: "myurl",
type: "POST",
dataType: "application/json",
headers:{'Accept' :'application/json', 'Content-Type': 'application/json' },
data : JSON.stringify(myData),
//handle the response
complete : function(treeData)
{
$("#dynaTree").dynatree("option", "generateIds", true);
var parsedTreeData = JSON.parse(treeData.responseText);
if(parsedTreeData.length ==0) {
var parsedTreeData = [{title: "No documents found for the search criteria, please revisit the criteria",
isFolder: false, tooltip: "No documents found for the search criteria, please revisit the criteria" }];
}
$("#dynaTree").dynatree("option", "children", parsedTreeData);
$("#dynaTree").dynatree("getTree").reload();
}
});
}}
呼び出し機能
$("#myLink").click(function() { myObj.getDynaTree(); }
ダイナツリーは別の JavaScript ファイルで初期化されました
//Initialization for the dyna tree.
var treeData = [{title: "Dynamic Tree Demo",isFolder: false, tooltip: "Here, is your Dynamic Tree!" }];
jQuery(document).ready(function() {
initReqActions(treeData);
});
initReqActions= function(myTree){
$("#dynaTree").dynatree({
checkbox: false,
selectMode: 2,
// create IDs for HTML elements that are generated
generateIds: true,
cookie: {
expires :-1
},
children: myTree,
onQuerySelect: function(select, node) {
if( node.data.isFolder )
return false;
},
onClick: function(node, event) {
if( ! node.data.isFolder )
node.toggleSelect();
},
onDblClick: function(node, event) {
node.toggleExpand();
},
onKeydown: function(node, event) {
if( event.which == 32 ) {
node.toggleSelect();
return false;
}
}
});
}
n= "#tree";
$(n).dynatree({});
tree = $(n).dynatree("getTree");
root = tree.getRoot();
tree.enableUpdate(false);
root.removeChildren();
tree.enableUpdate(true);