前两天做Ext Tree新增节点时花了好长时间才成功在树上增加了新节点,现把Ext Tree新增节点的过程记录下来,作为记念。
1、 创建目录结构如下
2、 然后分别创建控制器、model、store、view文件,完成之后文件内容如下
3、 创建树本身没有什么难度,按Ext例子做就可以了。
4、 在新增树节点时,我无论是调用parentNode.appendChild(newNode);还是调用parentNode.insertChild(1,newNode),都是可以把节点加到指定位置的,问题是新增的节点的文本总是空的,只是显示一个节点。我也尝试:
var newNode = Ext.create('Ext.data.NodeInterface',{
text:’节点’,
leaf:false
});
newNode.set("text","新增节点");
parentNode.appendChild(newNode);
结果新增节点内容还是显示为空。
看Ext的api文档,就是这样写的呀!在网搜索,尝试,没有解决。
。。。。。。。
经过近一天的尝试,在一次尝试中发现,parentNode.createNode(newNode);的返回值不是api文档中写的: createNode( Object node ) : Boolean,而是返回创建的节点!尝试把createNode( Object node )返回值作为appendChild的参数添加到节点中去,竟然成功!
正确新增节点的过程:
// 新增加节点
var newNode = Ext.create('Ext.data.NodeInterface',{
leaf: false
});
var parentNode;
if(selectNodes.length==0){
parentNode = Ext.getCmp('myTree').getRootNode();
}
else
parentNode = selectNodes[0];
/**
* 新增节点关键在这个地方的了,一定要先用parentNode.createNode()创建一个节点,用parentNode.appendChild把节点加到父节点中
* Ext4的Api上讲的parentNode.createNode()返回的是Boolean,实际返回的是创建的节点,就是因为这个地方,让我折腾了一天的时间
* 查看Ext的源文件,也证明了parentNode.createNode()返回的创建的节点(NodeInterface.js的365行与ext-all-debug的37668行的内容一样,如下):
* createNode: function(node) {
* if (Ext.isObject(node) && !node.isModel) {
* node = Ext.ModelManager.create(node, this.modelName);
* }
* return node;
*},
*/
var newNode = parentNode.createNode(newNode);
newNode.set("text","新增节点");
newNode.set("leaf",false);
parentNode.appendChild(newNode);
至此,问题解决,原因是ext4的api文档的一个错误造成的。
源代码资源:http://download.youkuaiyun.com/detail/littlechang/4443542