2016-07-07 171 views
1

我正在使用jsTree插件,發現我第二次調用refresh()時,樹將保持錯誤/加載狀態。 下面是代碼:jsTree在第二次刷新時失敗

.on('changed.jstree', function (e, data) { 
    var i, j, selectedNode; 
    selectedNode = data.node; 
    currentlySelectedNodeGUID = selectedNode.id; 
    //for (i = 0, j = data.selected.length; i < j; i++) { 
    // selectedNode = data.instance.get_node(data.selected[i]); 
    // currentlySelectedNodeGUID = selectedNode.id; 
    //} 
    $.ajax({ 
     url: '@Url.Action("LocationProperties","Location")', 
     type: 'GET', 
     data: { id: currentlySelectedNodeGUID }, 
     success: function (result) { 
      $('#locationPropertiesPartial').html(result); 
     }, 
     error: function (e) { 
      alert(e); 
     } 
    }); 
}); 

我發現的唯一的問題是,我得到這個錯誤 Uncaught TypeError: Cannot read property 'id' of undefined 在該行currentlySelectedNodeGUID = selectedNode.id;

然而,數據在那裏,data.node確實包含一個id屬性,它確實有一個值,它被賦值爲currentlySelectedNodeGUID

我幾乎無能爲力,爲什麼會發生這種情況。請幫忙嗎?

回答

1

當您致電refresh()您當前選定的節點被取消選擇,這會觸發changed事件。當沒有選擇節點時data.nodenull(或undefined)。這就是爲什麼data.node.id也是undefined。在樹被刷新之後,節點再次被選中,這再次觸發changed--這次是可用的節點對象。

因此,在發送ajax查詢之前,您需要檢查是否有實際存在的節點。

0

評估data.nodedata.selected在賦值之前是否爲空, 當jstree刷新時不帶錯誤,並且可以刷新任何需要的次數。

if (data.node != null) { 
    var dataid = data.node.id; 
}