jQuery MiniUI

 找回密码
 立即注册
查看: 12883|回复: 17
打印 上一主题 下一主题

关于TreeGrid中嵌套treeselect的问题 [复制链接]

Rank: 3Rank: 3

跳转到指定楼层
楼主
发表于 2014-1-3 11:57:38 |只看该作者 |倒序浏览

功能目的: 编辑后台模块,同时给模块指定拥有权限的部门。
使用控件: 使用TreeGrid中,再绑定一个<input property="editor" class="mini-treeselect"......>
出现的问题:
第1步 选择部门列表正常

第2步 问题1出现:离开部门列表,绑定的脚是value值。我希望显示的是text.  
当整个TreeGrid提交POST时,希望数据库保存的是Jsons格式:{"id":"value","Name":"text"}

第3步 问题2出现:重新加载页面, 再次编辑部门列表,发现初始化时总有一个被漏选。


初次接触MiniUI,不知道是不是我没找对方法 ,请各位大侠帮我解析一下。 多谢了。

附件: 你需要登录才可以下载或查看附件。没有帐号?立即注册

Rank: 3Rank: 3

沙发
发表于 2014-1-3 13:11:36 |只看该作者
怎么没有人解答呢?  

如果这个不好处理的话, 有其它办法达到同样的目的也是可以的, 麻烦大神指点下哦。

Rank: 8Rank: 8

板凳
发表于 2014-1-3 13:29:19 |只看该作者
yy0033 发表于 2014-1-3 13:11
怎么没有人解答呢?  

如果这个不好处理的话, 有其它办法达到同样的目的也是可以的, 麻烦大神指点下哦。 ...

列这样设置

<div field="yourField" displayField="aaa(任意取名)">部门权限</div>

试试

Rank: 3Rank: 3

地板
发表于 2014-1-3 13:52:24 |只看该作者
本帖最后由 yy0033 于 2014-1-3 13:57 编辑
factory 发表于 2014-1-3 13:29
列这样设置

部门权限

非常感谢大神, 用你的办法显示问题解决了。
还有两个问题麻烦指教下,
1. 由于默认保存到数据库的是以逗号分隔value值,当重新加载页面时,却无法显示text文本内容了。

2. 重新加载页面后, 部门树菜单依然存在有些节点未被选中, 但实际上value值里存在。


附件: 你需要登录才可以下载或查看附件。没有帐号?立即注册

Rank: 3Rank: 3

5#
发表于 2014-1-3 14:00:46 |只看该作者
这是我写的代码。  请大神指点。
  1. <!DOCTYPE html>
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4.     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5.     <title></title>
  6.     <link href="/scripts/miniUI.css" rel="stylesheet" />
  7.     <script src="/scripts/boot.js"></script>
  8.     <link href="/scripts/miniui/themes/blue/skin.css" rel="stylesheet" />
  9. </head>
  10. <body>
  11.     <input type="button" value="插入节点(前)" onclick="onAddBefore()" />
  12.     <input type="button" value="插入节点(后)" onclick="onAddAfter()" />
  13.     <input type="button" value="插入节点(子节点)" onclick="onAddNode()"/>
  14.    
  15.     <!--<input type="button" value="编辑节点" onclick="onEditNode()" />-->
  16.     <input type="button" value="删除节点" onclick="onRemoveNode()" />
  17.     <input type="button" value="保存" onclick="EventSaveData()" style="margin-left: 30px; font-weight: bold;" />
  18.     <!--<input property="editor" class="mini-treeselect" multiselect="true" value="" text="" textfield="DepartmentName" valuefield="fid" parentfield="pid" checkrecursive="true" showfoldercheckbox="false" expandonload="true" showclose="true" oncloseclick="onCloseClick" popupwidth="200" url="/Control/api.ashx?method=QueryCollDepartmentInfo" />-->
  19.     <h3></h3>
  20.     <div id="tree1" class="mini-treegrid" url="/Control/api.ashx?method=QueryCollModelInfo" style="width: 1500px; padding: 5px;height:auto;"
  21.          showtreeicon="true" idfield="fid" parentfield="pid" resultastree="false" showtreeicon="true"
  22.          allowdrag="true" allowdrop="true" allowleafdropin="true" expandonnodeclick="false" treecolumn="taskname" allowresize="true" allowcellselect="true" allowcelledit="true" oncellvalidation="onCellValidation">

  23.         <div property="columns">
  24.             <div type="indexcolumn"></div>
  25.             <div field="fid" width="100">编号<input class="mini-textbox" style="width:100%;" /></div>
  26.             <div name="taskname" field="ModelName" width="220">模块名称<input property="editor" class="mini-textbox" style="width:100%;" /></div>
  27.             <div field="ModelUrl" width="300px;">链接地址<input property="editor" class="mini-textbox" style="width:100%;" /></div>

  28.             <div field="ListPowerDepartmentID" width="100" displayfield="DepartmentName" >
  29.                 部门权限
  30.                 <input property="editor" class="mini-treeselect" multiselect="true" value="" text="" textfield="DepartmentName" valuefield="fid" parentfield="pid" checkrecursive="true" showfoldercheckbox="true" expandonload="false" showclose="true" oncloseclick="onCloseClick" popupwidth="200" url="/Control/api.ashx?method=QueryCollDepartmentInfo" />
  31.             </div>

  32.             <div field="ListPowerUser" width="100%">员工权限<input property="editor" class="mini-textbox" style="width:100%;" /></div>
  33.             <div field="LanguageID" width="100px;">语言包ID<input property="editor" class="mini-textbox" style="width:100%;" /></div>
  34.             <div field="RemarkInfo" width="300px;">备注<input property="editor" class="mini-textarea" style="width:100%;" /></div>
  35.         </div>
  36.     </div>

  37.     <script type="text/javascript">

  38.         function onAddBefore(e) {
  39.             var tree = mini.get("tree1");
  40.             var node = tree.getSelectedNode();

  41.             var newNode = {};
  42.             tree.addNode(newNode, "before", node);
  43.         }
  44.         function onAddAfter(e) {
  45.             var tree = mini.get("tree1");
  46.             var node = tree.getSelectedNode();            
  47.             var newNode = {};
  48.             tree.addNode(newNode, "after", node);
  49.         }
  50.         function onAddNode(e) {
  51.             var tree = mini.get("tree1");
  52.             var node = tree.getSelectedNode();

  53.             var newNode = {};
  54.             tree.addNode(newNode, "add", node);
  55.         }
  56.         function onEditNode(e) {
  57.             var tree = mini.get("tree1");
  58.             var node = tree.getSelectedNode();

  59.             tree.beginEdit(node);
  60.         }
  61.         function onRemoveNode(e) {

  62.             var tree = mini.get("tree1");
  63.             var node = tree.getSelectedNode();

  64.             if (node) {
  65.                 if (confirm("确定删除选中节点?")) {
  66.                     tree.removeNode(node);
  67.                     EventRemoveNode(node);
  68.                 }
  69.             }
  70.         }
  71.         function onMoveNode(e) {
  72.             var tree = mini.get("tree1");
  73.             var node = tree.getSelectedNode();

  74.             alert("moveNode");
  75.         }
  76.         function EventSaveData() {
  77.             var tree = mini.get("tree1");
  78.             var data = tree.getData();
  79.             var json = mini.encode(data);
  80.             var msgid = mini.loading("数据保存中,请稍后......", "保存数据");

  81.             $.ajax({
  82.                 url: "/Control/api.ashx?method=InsertCollModeInfo",
  83.                 data: { data: json },
  84.                 type: "post",
  85.                 success: function (text) {
  86.                     mini.hideMessageBox(msgid);
  87.                     tree.load("/Control/api.ashx?method=QueryCollModelInfo");
  88.                 },
  89.                 error: function (jqXHR, textStatus, errorThrown) {
  90.                     alert(jqXHR.responseText);
  91.                 }
  92.             });
  93.         }

  94.         function EventRemoveNode(node)
  95.         {
  96.             var tree = mini.get("tree1");
  97.             var json = node.length <= 0 ? null : mini.encode(node);            
  98.             var msgid = mini.loading("数据删除中,请稍后......", "删除数据");

  99.             $.ajax({
  100.                 url: "/Control/api.ashx?method=DeleteCollModeInfo",
  101.                 data: { data: json },
  102.                 type: "post",
  103.                 success: function (text) {
  104.                     mini.hideMessageBox(msgid);
  105.                 },
  106.                 error: function (jqXHR, textStatus, errorThrown) {
  107.                     alert(jqXHR.responseText);
  108.                 }
  109.             });
  110.         }

  111.         function onCloseClick(e) {
  112.             var obj = e.sender;
  113.             obj.setText("");
  114.             obj.setValue("");
  115.         }


  116.         function ondrawcell(e)
  117.         {
  118.             var tree = e.sender;
  119.             var node = e.node;
  120.             
  121.             if (e.field == 'ListPowerDepartmentID') {
  122.                 e.cellHtml = "12321321";
  123.             }
  124.         }
  125.     </script>

  126. </body>
  127. </html>
复制代码

Rank: 8Rank: 8

6#
发表于 2014-1-3 14:30:20 |只看该作者
yy0033 发表于 2014-1-3 14:00
这是我写的代码。  请大神指点。

你应该是这样,你加上displayField="DepartmentName" ,getChanges()获取出来的行数据,内部其实是给你加上了这个DepartmentName字段了,所以你最好把DepartmentName也保存到数据库

因为你这个的值是逗号分隔的,跟单选的combobox还不太一样,你应该提供的数据是这样
{id:"1", ListPowerDepartmentID:"xxxx",DepartmentName:"文本"}
然后field="ListPowerDepartmentID"  displayField="DepartmentName",这样treegrid才只知道你的显示文本是什么

Rank: 3Rank: 3

7#
发表于 2014-1-3 14:47:15 |只看该作者
factory 发表于 2014-1-3 14:30
你应该是这样,你加上displayField="DepartmentName" ,getChanges()获取出来的行数据,内部其实是给你加上 ...

在哪儿触发getChanges(), 是Mini的涵数吗?
如果提供的数据必需是{id:"1", ListPowerDepartmentID:"xxxx",DepartmentName:"文本"}, 那么保存到数据库的就不应该是逗号分隔了, 而是这个JSON格式。   请问这个要怎么实现呀?
能否写一个简单的DEMO看看呢。

Rank: 8Rank: 8

8#
发表于 2014-1-3 14:52:40 |只看该作者
本帖最后由 factory 于 2014-1-3 14:53 编辑
yy0033 发表于 2014-1-3 14:47
在哪儿触发getChanges(), 是Mini的涵数吗?
如果提供的数据必需是{id:"1", ListPowerDepartmentID:"xxxx ...

我就是用getChanges()举个获取行对象的例子.
反正只要你的列上有displayFiled, 那么只要当你修改完数据之后,原本的数据中,就自动会给你加上displayField的字段值
比如你原来数据是{id:"1",name:"2"}

你的列是field ="name" displayField = "sssss"
那么你编辑完name这一列之后,你的数据自然而然会增加为 {id:"1",name:"2",sssss:"文本"}
你把sssss也可以保存到数据库,下次读取的时候,我们就能从sssss上知道你的name这一列的文本显示displayField="sssss"应该是什么文本了

Rank: 3Rank: 3

9#
发表于 2014-1-3 16:06:35 |只看该作者
本帖最后由 yy0033 于 2014-1-3 16:10 编辑
factory 发表于 2014-1-3 14:52
我就是用getChanges()举个获取行对象的例子.
反正只要你的列上有displayFiled, 那么只要当你修改完数据之 ...

折腾了一个小时,还是没太明白。
应该在哪儿触发getChanges()事件呢?
  1. <div id="tree1" class="mini-treegrid" url="/Control/api.ashx?method=QueryCollModelInfo" style="width: 1500px; padding: 5px;height:auto;"
  2.          showtreeicon="true" idfield="fid" parentfield="pid" resultastree="false" showtreeicon="true" ondrawcell="onDrawCell"
  3.          allowdrag="true" allowdrop="true" allowleafdropin="true" expandonnodeclick="false" treecolumn="taskname" allowresize="true" allowcellselect="true" allowcelledit="true" oncellvalidation="onCellValidation">

  4.         <div property="columns">
  5.             <div type="indexcolumn"></div>
  6.             <div field="fid" width="100">编号<input class="mini-textbox" style="width:100%;" /></div>
  7.             <div name="taskname" field="ModelName" width="220">模块名称<input property="editor" class="mini-textbox" style="width:100%;" /></div>
  8.             <div field="ModelUrl" width="300px;">链接地址<input property="editor" class="mini-textbox" style="width:100%;" /></div>

  9.             <div field="ListPowerDepartmentID" width="100" displayfield="DepartmentName">
  10.                 部门权限
  11.                 <input property="editor" class="mini-treeselect" multiselect="true" value="" text="" textfield="DepartmentName" valuefield="fid" parentfield="pid" checkrecursive="true" showfoldercheckbox="true" expandonload="false" showclose="true" oncloseclick="onCloseClick" popupwidth="200" url="/Control/api.ashx?method=QueryCollDepartmentInfo" />
  12.             </div>
  13.             <div field="ListPowerUser" width="100%">员工权限<input property="editor" class="mini-textbox" style="width:100%;" /></div>
  14.             <div field="LanguageID" width="100px;">语言包ID<input property="editor" class="mini-textbox" style="width:100%;" /></div>
  15.             <div field="RemarkInfo" width="300px;">备注<input property="editor" class="mini-textarea" style="width:100%;" /></div>
  16.         </div>
  17.     </div>
  18. //加载时使用onDrawCell,那修改时应该用哪个方法触发?
  19. function onDrawCell(e)
  20.         {
  21.             var data = e.field;
  22.             if (e.field == "ListPowerDepartmentID")
  23.                 alert(e.node["ListPowerDepartmentID"]);


  24.         }
复制代码


Rank: 8Rank: 8

10#
发表于 2014-1-3 16:09:19 |只看该作者
yy0033 发表于 2014-1-3 16:06
折腾了一个小时,还是没太明白。
应该在哪儿触发getChanges()事件呢?

你不需要管getChanges()的啊

我只是举个获取行对象的方法例子而已

我就是告诉你,你只要指明了displayField, 那么行数据中,自然就会给你加上displayField字段,你可以用这个把单元格文本保存起来

Archiver|普加软件

GMT+8, 2025-7-17 04:40 , Processed in 1.052484 second(s), 11 queries .

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部