的必然事件。如果你按需加載數據(例如,通過AJAX呼叫),問題是第二個節點(第一個孩子的第一個孩子)不存在當執行下列行時:
$("#treeview").data("kendoTreeView").expand("li:fist li:first")
爲了實現這一點,您必須在第一個expand()完成執行後立即執行該行。
我看到兩個選項:
使用kendoTree事件
使用的setTimeout(醜陋的方式)
廣告1.
var yourTreeSelector = "#youTreeId";
var $tree = $(yourTreeSelector);
var treeView = $tree.data("kendoTreeView");
var $firstItem = $tree.find(' > ul > li.k-item:first');
console.log($firstItem);
//make sure selector is ok and first item exists
if($firstItem.length){
treeView.expand($firstItem); //expand first item
var secondSelectedFlag = false; //init flag to false
//handler method
selectSecond = function(){
var $fistChildOfFirstItem = $firstItem.find(' > ul > li.k-item:first');
console.log($fistChildOfFirstItem);
//make sure expand will execute only when node exists and was not expanded earlier
if(!secondSelectedFlag && $fistChildOfFirstItem.length){
secondSelectedFlag = true;
treeView.expand($fistChildOfFirstItem);//expand on selected node
treeView.unbind("dataBound");//unbind method
}
}
treeView.bind("dataBound", selectSecond);//bind a handler method to dataBound event
}
廣告2.擴大後第一個節點處下面的代碼:
setTimeout(
function(){
var $fistChildOfFirstItem = $firstItem.find(' > ul > li.k-item:first');
console.log($fistChildOfFirstItem);
treeView.expand($fistChildOfFirstItem);
},
3000 //3 seconds is reasonable amount of time
);
是否使用'loadOnDemand'如果是這樣,那是不是因爲當你展開父那麼容易,它開始加載兒子,只有當兒子被加載時,你可以擴大它得到了盛大的孩子。 – OnaBai
@OnaBai是的,我正在使用loadondemand。我如何做到這一點,當使用按需加載和不使用按需加載 – Jonathan