在ExtJs4的api中,以下方式创建一棵树。
var store = Ext.create('Ext.data.TreeStore', {
root: {
expanded: true,
children: [
{ text: "detention", leaf: true },
{ text: "homework", expanded: true, children: [
{ text: "book report", leaf: true },
{ text: "algebra", leaf: true}
] },
{ text: "buy lottery tickets", leaf: true }
]
}
});
Ext.create('Ext.tree.Panel', {
title: 'Simple Tree',
width: 200,
height: 150,
store: store,
rootVisible: false,
renderTo: Ext.getBody()
});
如果这样的方式创建的树,添加节点后,用网上说的
me.getStore().reload();
tree.root.reload();
之类常规的刷新方法都不管用,请问该如何刷新?
tree.root.reload();
tree.getNodeById(tree.getSelectionModel().getSelectedNode().id).reload();
提示不是一个方法,是不是大侠你的这种方式适合proxy重加载的?
我这种一开始就取出了所有数据加载页面的该如何处理呢?
提示reload 不是一个方法
可能你的根节点不是 nodeType: 'async',
或者其他子节点的 leaf: true 你设置的不是true
一开始加载的也无所谓 你无非是想修改后刷新此节点或者刷新此节点的父节点
获取到此节点或者此节点的父节点刷新一下即可
前提是根节点必须是 'async'
root: {
nodeType: 'async',
..
}
而且子节点必须是leaf: true
因为必须是“静态树”才有reload()方法
当然子节点默认leaf就是true 根节点需要你写上面这个属性
这个和nodeType属性有没有设定应该没有关系的吧,因为我是将所有数据取出来进行加载的。
追答报无Reload这个方法 就是你的子节点不是async 静态节点 方法上面我说过的 ^_^
追问我在root节点上添加了这个属性,并且用root节点调用reload方法也不行。
发现是我新插入的节点构造得有问题,开始弄得太复杂了,其实直接构造一个普通的对象,将id、leaf、text的属性加上后,然后调用insertChild方法,然后将父节点的leaf属性设为false,expanded设为true,这样就实现了插入节点但不需要刷新树的功能,并且可以操作新增加的节点了。多谢上面的回答。
改变了数据的,我通过构造新store后也不改变,请问这个该如何处理呢?
追答代码发上来。你这代码store根本没配置proxy,哪里从后台来数据啊
追问在最开始创建treestore的时候就赋值了,我将树需要的所有值都取出来再创建的store。
var store = Ext.create('Ext.data.TreeStore', {
...
});
这部分写死的数据啊,我直接改children对象的值后如何进行更新呢?
你的思路就错了,既然是写死的数据,你就不要改。你要的是活的数据,你就不要写死。哪有用写死的做法来做 活的东西的啊。而且树的store只是一个数据源,数据读取出来后,你再改store里的内容没有用的。
对于extjs千万不要试图绕开它的设计思想而采取粗暴简单的理解去应用它,那会让你摸不着头脑的
可能是我的理解错了。我认为的是树创建出来的是死的,但是数据是活的,就算是通过数据源配置的数据,归根结底还是改变了树里面的数据,只不过我现在不需要通过数据源获取数据,而是已经弄好了数据。
追答直接改store里的数据是影响不了树的。能直接影响的是nodeinterface对象
追问我用node.insertChild()方法插入了一个节点,但是该节点和整棵树是脱节的,这个该如何让该节点和之前的树衔接起来呢?
追答你要取到正确的node,树的每一个节点都是一个node对象。
追问在调试的时候我发现是我新插入的节点构造得有问题,开始弄得太复杂了,其实直接构造一个普通的对象,将id、leaf、text的属性加上后,然后调用insertChild方法,然后将父节点的leaf属性设为false,expanded设为true,这样就实现了插入节点但不需要刷新树的功能,并且可以操作新增加的节点了。多谢上面的回答。
用了,也不管用呢
在ExtJs4中,对于treepanel增加节点后应该如何刷新?
tree.on('beforeload', function (node) { node.select();tree.loader.dataUrl = 'UnitsList.aspx?cmd=getTree&ID=' + node.id + '&rd=' + Math.random(); \/\/定义子节点的Loader });GetTree只用查询 ParentID=ID 的数据 返回即可 添加之后 刷新 if (tree.getSelectionModel().getSe...
求extjs4 treepanel 实例
只要配置treepanel里面读取数据的方法,后台返回数据就行。用来区分是第几级节点当然得有参数,最好是用id,方便。用别的也行。可以自已定义。当点击root节点的时候,传一个id取第一级所有节点。你再展开第一级节点的时候,他会再调用读数据的方法,这时返回第二级节点数据就ok了。
extjs treepanel 如何打开他的第一个节点以及子节点的诶一个节点
tree.getRootNode().firstChild.expand();\/\/节点node node.expand()node.firstChild.expand();\/\/定义展开事件 tree.on("expandnode", function(node) { tree.suspendEvents(); \/\/暂停所有监听事件的执行 node.firstChild.expand();tree.resumeEvents(); \/\/重新开始所有监听事件的执行 });思路应...
Extjs4.2 treepanel 显示重复,store中却只有一份,有时会显示多份,解决...
STORE 加载的时候加载两次。\/\/ treePanel.getView().getStore().load() ;没有remove 掉原数据 \/\/ treepanel.getRootNode().removeAll();代码是解决办法。
Extjs4.2 treepanel 显示重复,store中却只有一份,有时...
你光截个画面哪能知道原因啊,这个只能给你猜了,除非你上传代码。STORE 加载的时候加载两次。\/\/ treePanel.getView().getStore().load() ;没有remove 掉原数据 \/\/ treepanel.getRootNode().removeAll();代码是解决办法。
EXTjs 怎样遍历树的所有节点获取节点下的值
\/\/tree 是个Ext.tree.TreePanel对象 var roonodes = tree.getRootNode().childNodes; \/\/获取主节点 findchildnode(roonodes); \/\/开始递归 function findchildnode(node){ var childnodes = node.childNodes;for(var i=0;i<childnodes.length;i++){ \/\/从节点中取出子节点依次遍历 var ...
如何找到 ExtJS TreePanel 中的所选的节点
这里说的选中是指鼠标点击一个节点后,节点那一行出现浅蓝色背景的选中,而非checkbox的勾选 方法 Ext.tree.TreePanel.getSelectionModel().getSelectedNode();Ext.tree.TreePanel.getSelectionModel()获得的是一个TreeSelectionModel对象,这个TreeSelectionModel目前在Ext中有两个Ext.tree.DefaultSelection...
ExtJs点击Tree后会在TabPanel生成新Panel,Tree有十几个节点,如何做到one...
到底哪个是左边的。你是想说左边是treepanel,右边是panel吗。点击左边的树的节点,右边的panel的内容变化是吗。 直接用extjs的controller和view就可以
extjs 4 tree 事件 的单击节点时间怎么添加??
treePanel.on({ \/\/目录树单击事件 'itemclick' : function(view, rcd, item, idx, event, eOpts) { var dirid = rcd.get('id'); \/\/节点id var dirtype = rcd.raw.dirtype; \/\/自定义数据 },\/\/目录树双击击事件 'itemdblclick' : function(view, rcd, item, idx, event, eOpts) ...
extjs 刷新问题
树的刷新在ExtJS4中存在缺陷 需要在treeStore刷新前将所有树节点removeAll掉才可以Load code:treeStore.getRootNode().removeAll();treeStore.load();