我试图在选择非根节点时动态地将子树节点添加到它。
这就是我实现它的方式:
首先,我用 TreeStore 填充我的树,然后动态添加子树节点,我在树控制器中的 itemexpand 事件上处理它。
//pThis is a NodeInterface obj of the selected node
itemexpand: function (pThis, pEOpts) {
//type is an attribute that I added so that I know what type of node that got selected
if (pThis.raw.type === 'Staff' && !pThis.hasChildNodes()) {
var staffNodeAry = [{text:"Teachers", type:"ChildStaff", leaf: false},
{text:"Principals", type:"ChildStaff", leaf: false}];
pThis.appendChild(staffNodeAry);
}
}
这工作得很好,因为我能够在“员工”类型下看到“教师”和“校长”节点,但到目前为止我发现了 2 个问题:
1)控制台上有这个错误:
未捕获的类型错误:无法读取未定义的属性“internalId”
我不知道为什么,但如果有人能启发,那就太好了。
2) 当我展开“Teachers”和“Principals”时,itemexpand 返回的 NodeInterface obj 有一个未定义的原始对象。
所以我不能这样做:pThis.raw.type
据我了解,我不需要创建一个新的 TreeStore 来添加任何新的子节点,我认为通过创建一个遵守 NodeInterface 的对象数组就足够了,但我可能错了。如果有人能指出我正确的方向,那就太好了。
汉地
更多信息:
我所做的实际上是遵循 ExtJs 4 文档,所以我相信这是 ExtJs 4 框架上的一个错误。
我还用 Extjs-4.1.0-rc3 对此进行了测试,它也产生了同样的错误。