当我尝试加载JSTree的初始数据时,我遇到了问题;我有2个顶级节点连接到根节点,但是当我加载它们时,看起来添加的最后一个节点在JSTree中是重复的。起初看起来好像是我的错,因为每次都没有特别声明一个新对象,但我已经解决了这个问题。我正在使用.net MVC,因此初始数据来自传递给我视图的模型(即传递给方法的data参数的数据)。
this.loadInitialData = function (data) {
var tree = self.getTree();
for (var i = 0; i < data.length; i++) {
var node = new Object();
node.id = data[i].Id;
node.parent = data[i].Parent;
node.text = data[i].Text;
node.state = {
opened: data[i].State.Opened,
disabled: data[i].State.Disabled,
selected: data[i].State.Selected
};
node.li_attr = { "node-type": data[i].NodeType };
node.children = [];
for (var j = 0; j < data[i].Children.length; j++) {
var childNode = new Object();
childNode.id = data[i].Children[j].Id;
childNode.parent = data[i].Children[j].Parent;
childNode.text = data[i].Children[j].Text;
childNode.li_attr = { "node-type": data[i].Children[j].NodeType };
childNode.children = data[i].Children[j].HasChildren;
node.children.push(childNode);
}
tree.create_node("#", node, "last");
}
}
我的初始代码是声明节点,如下所示:
var node = {
id: data[i].Id
}
我认为这是我所看到的原因,但修复它并没有改变任何东西。以下是我运行应用程序时发生的情况;在方法的第一次传递中,一切看起来都很好。
但是在循环运行第二次(和最后一次)之后,这是最终结果。
看起来节点对象只是彼此的副本,但是当我通过调试器运行代码时,我看到每次都要初始化对象。有谁知道在JSTree中会导致这种行为的原因是什么?我应该使用不同的方法来创建除了create_node之外的初始节点吗?
提前致谢。
答案 0 :(得分:0)
我发现了这个问题;我没有意识到,但我将我的id属性设置为两个节点组的相同ID。修好后,一切都按预期开始了。