我想将树中的每个节点与域对象相关联。我传递HTML数据并在jQuery数据中手动存储域对象:
$('li node description').data('obj', my_domain_object);
但是,似乎jsTree在$('#jstree_div').jstree();
期间清除了该数据。
所以稍后,$('li node description').data('obj')
未定义。
这样做的最佳做法是什么? (我猜测HTML或JSON数据的原理是相同的)
答案 0 :(得分:1)
jsTree保持数据完整,但出于优化原因移动它[1]。所以在回调中,必须通过data.node.data.some_key
访问它。在我的例子中,神奇的咒语是:
$('#jsTree_div').on('select_node.jstree', function (e, data) {
data.node.data.obj //... (instead of $('#node_id').data('obj'))
});
[1]“这是因为速度而完成的。每次重绘节点时使用jQuery的'.data()'附加数据都证明是相当慢的。” - Ivan Bozhanov,jsTree创建者https://groups.google.com/d/msg/jstree/w97E8uG_Bd0/enYklH-B1-cJ