关于coolite TreePanl删除节点后刷新的问题

微醺_zZ 2010-07-01 10:22:27
在页面放置一个隐藏文本域
<ext:Hidden runat="server" Enabled="false" ID="hidFlag">
<Listeners>
<Enable Handler="refreshTree(#{pnlTree});"/> //pnlTree就是我左边的树
</Listeners>
</ext:Hidden>
当通过Ajax方法更改数据后设置 this.hidFlag.Enabled = true;
随即调用

  function refreshTree(tree) {
Coolite.AjaxMethods.RefreshMenu({
success: function(result) {
var nodes = eval(result);
tree.root.ui.remove();
tree.initChildren(nodes);
tree.root.render();
}
});
}


注:必须调用JS重新渲染,不然虽然绑定了数据,但原本就是ajax的数据绑定,所以页面前端没有同时渲染而已
后台对应一个AjaxMethod
  [AjaxMethod]
public string RefreshMenu()
{
Coolite.Ext.Web.TreeNodeCollection nodes = this.BuildTree(null);
return nodes.ToJson();
}


//注意:
BuildTree(null)为我迭代构建树的方法,但注意返回类型

private Coolite.Ext.Web.TreeNodeCollection BuildTree(Coolite.Ext.Web.TreeNodeCollection nodes)
{
if (nodes == null)
{
nodes = new Coolite.Ext.Web.TreeNodeCollection();
}
List<EntityUserInfo> list = new BLLUserInfo().GetAllUser();
foreach (var lis in list)
{
_parent = lis.Id;
Coolite.Ext.Web.TreeNode childNode = new Coolite.Ext.Web.TreeNode();
childNode.Text = lis.UserName;
childNode.NodeID = lis.Id.ToString();
childNode.Icon = Icon.UserGreen;
if (lis.HasSon)
{
childNode.Expanded = true;
childNode.Icon = lis.ParentId == 0?Icon.UserHome:Icon.UserRed;
childNode.Leaf = false;
BuildTree(childNode.Nodes);
}
nodes.Add(childNode);
}
return nodes;
}

页面TreePanl:


 <ext:TreePanel ID="tp" runat="server" Header="false" Border="false" AutoScroll="true" Lines="false" CollapseFirst="false" ContainerScroll="true" RootVisible="true"> 
<Root>
<ext:AsyncTreeNode Text="分类目录" NodeID="root" Expanded="true" />
</Root>
动态加载的子节点内容...
</ext:TreePanel>




js中红色的那句话把root的ui删了,虽然能解决刷新的问题,但页面写死的那个Root没有了...
求教有没有别的办法让页面刷新时显示 Root节点,或者刷新时不删除Root的UI
...全文
140 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
menglionel 2011-02-12
  • 打赏
  • 举报
回复
怎么弄的?
微醺_zZ 2010-07-02
  • 打赏
  • 举报
回复
解决了,我的办法是

/// <summary>
/// 取消选中分类
/// </summary>
/// <param name="node">分类</param>
/// <param name="checkflg">是否选中</param>
/// <returns>节点对象</returns>
[AjaxMethod]
public string CheckedChildNode(string node, string checkflg)
{
Coolite.Ext.Web.TreeNodeCollection nodes = new Coolite.Ext.Web.TreeNodeCollection();
return nodes.ToJson();
}
hoojo 2010-07-02
  • 打赏
  • 举报
回复
树重新渲染下
微醺_zZ 2010-07-01
  • 打赏
  • 举报
回复
我也不知道是怎么回事,把ROOT的UI给删了啊....后来我改成了tree.root.reload()

如果我想只刷新当前选中节点的父层节点那我该怎么写呢?求教了....希望我不要白扔了40分
hoojo 2010-07-01
  • 打赏
  • 举报
回复

tree.root.ui.remove();不是删除当前ui节点么
微醺_zZ 2010-07-01
  • 打赏
  • 举报
回复
来人,给分结贴,真不该问...
微醺_zZ 2010-07-01
  • 打赏
  • 举报
回复
tree.root.ui.remove();这个就是红色那句
微醺_zZ 2010-07-01
  • 打赏
  • 举报
回复
补充一下
function refreshTree(tree) {
Coolite.AjaxMethods.RefreshMenu({
success: function(result) {
var nodes = eval(result);
tree.root.ui.remove();
tree.initChildren(nodes);
tree.root.render();
}
});
}
微醺_zZ 2010-07-01
  • 打赏
  • 举报
回复
恩,只是象征性的闪了一下,被删除的节点还在,并没有重新加载树

有没有解决的办法呢
hoojo 2010-07-01
  • 打赏
  • 举报
回复

currentNode.parentNode.expandChildNodes();
or
currentNode.parentNode.expand();
or
currentNode.parentNode.expanded = true;

52,797

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 Ajax
社区管理员
  • Ajax
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧