jQuery MiniUI

标题: [求助]Inline Grid 静态删除的办法 [打印本页]

作者: langben    时间: 2014-2-24 12:19:32     标题: [求助]Inline Grid 静态删除的办法

本帖最后由 langben 于 2014-2-24 12:27 编辑

[attach]3966[/attach]
我想先删除行后点保存任务,再真正从数据库删除记录。
这个要怎么弄呢?
我尝试用DataGrid动态删除是可以做到的, 但不是很喜欢再单独写一个remove的后台方法。
现在的增删改查我都是模拟【CellValidation New!】  这个组件封装了save方法,前台把所有操作完成后统一提交到后台代码中处理。

以下是我写的JS, 但提交了,后台收不到删除的信息。。  
  1. function mini_gridRemoveRow(e) {
  2.             var tree = mini.get("TaskGrid");
  3.             var node = tree.getSelectedNode();

  4.             if (node) {
  5.                 if (confirm("小心,确定删除选中任务和所有子任务?")) {
  6.                     tree.removeNode(node);
  7.                     //var rows = tree.getSelecteds();
  8.                     //if (rows.length > 0) {
  9.                     //    tree.removeNode(rows, true);
  10.                     //}
  11.                 }
  12.             }
  13.         }
复制代码



作者: factory    时间: 2014-2-24 12:58:24

树形的增删改看我们demo,我们例子也没有单独写个后台的remove的方法啊. 只有一个save方法
作者: langben    时间: 2014-2-24 14:29:12

factory 发表于 2014-2-24 12:58
树形的增删改看我们demo,我们例子也没有单独写个后台的remove的方法啊. 只有一个save方法 ...
  1. var miniGrid = mini.get("TaskGrid");
  2.         function mini_updateRow() {
  3.             var data = miniGrid.getData();
  4.             var json = mini.encode(data);
  5.             alert(json);
  6.             return;
  7.             miniGrid.loading("正在用力的保存中,请稍后......");

  8.             $.ajax({
  9.                 url: "/Control/Project.ashx?method=SaveCollTaskInfo",
  10.                 data: { data: json },
  11.                 type: "post",
  12.                 success: function (text) {
  13.                     miniGrid.reload();
  14.                 },
  15.                 error: function (jqXHR, textStatus, errorThrown) {
  16.                     alert(jqXHR.responseText);
  17.                 }
  18.             });
  19.         }
复制代码

[attach]3970[/attach]
为啥我只删除一个节点, 点保存的时候监控到的JSON却是整个表单的串呢。 而已删除的那个节点值不在这个JSON串里面。
应该怎么处理?

作者: factory    时间: 2014-2-24 15:46:06

langben 发表于 2014-2-24 14:29
为啥我只删除一个节点, 点保存的时候监控到的JSON却是整个表单的串呢。 而已删除的那个节点值不在这个 ...

树形 的增删改保存是需要把这棵树的数据发送到后台的,
因为树形比较特殊,他跟表格数据不同, 表格的话,没有层级,顺序就是某个字段排序即可,但是tree涉及到父子关系, 节点顺序问题,而节点顺序也是在某个父节点下的顺序,所以需要把整个树发送到后台,这样才能获取到正确层级顺序. 尤其是你树节点拖动了前后顺序之后
作者: langben    时间: 2014-2-24 15:47:37

我的意思就是想点击删除按钮的时候,只是移去UI层的记录。 只有点保存按钮的时候,才真正删除后台数据库的记录。
作者: factory    时间: 2014-2-24 15:48:59

langben 发表于 2014-2-24 15:47
我的意思就是想点击删除按钮的时候,只是移去UI层的记录。 只有点保存按钮的时候,才真正删除后台数据库的 ...

你点remove()就是UI层的删除. 你只要不保存,你刷新下界面,数据还是在的,miniui是JS控件,真正的删除肯定是后台操作数据库删除,所以只要你不去后台执行删除,数据不会真正被删除的
作者: langben    时间: 2014-2-24 15:51:29

factory 发表于 2014-2-24 15:48
你点remove()就是UI层的删除. 你只要不保存,你刷新下界面,数据还是在的,miniui是JS控件,真正的删除肯定是 ...

是的。但我点击保存的时候,已删除的记录没有传到后台。 我就取不到对应的ID号,无法做删除啊。

作者: langben    时间: 2014-2-24 15:54:30

langben 发表于 2014-2-24 15:51
是的。但我点击保存的时候,已删除的记录没有传到后台。 我就取不到对应的ID号,无法做删除啊。
...

现在移去UI层的记录可以做到 。 没有问题的。 tree.removeNode(node);
现在的问题是: 当我编辑完所有数据点击保存时,  这些被移除的记录并没有提交到后台代码中, 而是将当前UI层存在的记录拼成了JSON传到后台。   等于没有做什么何删除操作了。
作者: factory    时间: 2014-2-24 15:59:10

langben 发表于 2014-2-24 15:54
现在移去UI层的记录可以做到 。 没有问题的。 tree.removeNode(node);
现在的问题是: 当我编辑完所有数 ...

不会的,tree的增删改,你参考这个例子:
http://www.miniui.com/demo/index.html#src=tree/treeCRUD.html
http://www.miniui.com/demo/index.html#src=tree/treeCRUD2.html
作者: langben    时间: 2014-2-24 16:35:52

factory 发表于 2014-2-24 15:59
不会的,tree的增删改,你参考这个例子:
http://www.miniui.com/demo/index.html#src=tree/treeCRUD.html
h ...

弄明白了。
tree.getChanges();
tree.getData();
是这两个方法的概念我弄混了。。
第一个是获取有变更的数据。
第二个是获取当前UI所有存在的数据。

我的理解没错吧?
作者: langben    时间: 2014-2-24 16:45:25

langben 发表于 2014-2-24 16:35
弄明白了。
tree.getChanges();
tree.getData();

刚测试了一下,理解应该是没错了。
当我改成tree.getChanges();  可以正常删除节点, 但是新增节点又出问题了。  会将子节点多生成一份为父节点。   换成tree.getData();才能正常新增。   

新增和删除不能共存么?
作者: langben    时间: 2014-2-24 17:22:27

  1. function mini_updateRow() {            
  2.             var miniGrid = mini.get("TaskGrid");
  3.             //miniGrid.commitEdit();
  4.             var data = miniGrid.getChanges();  //miniGrid.getData();    //这儿是获取数据的地方。
  5.             var json = mini.encode(data);
  6.            
  7.             alert(json);
  8.             return;

  9.             miniGrid.loading("正在用力的保存中,请稍后......");

  10.             $.ajax({
  11.                 url: "/Control/Project.ashx?method=SaveCollTaskInfo",
  12.                 data: { data: json },
  13.                 type: "post",
  14.                 success: function (text) {
  15.                     miniGrid.reload();
  16.                 },
  17.                 error: function (jqXHR, textStatus, errorThrown) {
  18.                     alert(jqXHR.responseText);
  19.                 }
  20.             });
  21.         }
复制代码



[attach]3976[/attach]

保存的JS方法, 改成了miniGrid.getChanges();获取数据。
但为啥父节点下也会生成一样的数据?

作者: felt    时间: 2014-2-24 17:26:08

langben 发表于 2014-2-24 17:22
保存的JS方法, 改成了miniGrid.getChanges();获取数据。
但为啥父节点下也会生成一样的数据?
...

树形 的增删改保存是需要把这棵树的数据发送到后台的
不要用getChanges
作者: langben    时间: 2014-2-24 17:41:50

本帖最后由 langben 于 2014-2-24 17:47 编辑
felt 发表于 2014-2-24 17:26
树形 的增删改保存是需要把这棵树的数据发送到后台的
不要用getChanges

如果用miniGrid.getData(); 只能识别insert和modified,  删除的节点的children值为空。  后台就无法识别该删除哪些了。   也就是说miniGrid.getData(); 取得的数据没有remove  。。  
咋整呢?

作者: factory    时间: 2014-2-24 17:48:44

langben 发表于 2014-2-24 17:41
如果用miniGrid.getData(); 只能识别insert和modified,  删除的节点的children值为空。  后台就无法识别 ...

按照我给你的例子去做tree的增删改

另外,getChanges()获取出来的,你上面的截图是正确的, children作为你一个修改的节点的属性字段,当然存在了.里面也当然存在他的子节点数据

getChanges()获取出来的是一个数组,他里面的数据不分层次,所以你不用管他的children,你只需要遍历这个数组,区分他的里面的每一个项的_state就行了,不需要你再去遍历children的项,children有没有也不影响你
作者: langben    时间: 2014-2-24 18:12:18

factory 发表于 2014-2-24 17:48
按照我给你的例子去做tree的增删改

另外,getChanges()获取出来的,你上面的截图是正确的, children作为你 ...

也就是说我只需要使用getData();就行了吗?
我用你的DEMO完全COPY出来,不修改任何代码, 然后将function saveData()方法中的alert(在线演示....)改为alert(json), 监控getData()取到的数据,确实是没有_state=removed 这一项。只有insert和modified。
DEMO是:
http://www.miniui.com/demo/index.html#src=tree/treeCRUD.html

作者: factory    时间: 2014-2-24 18:26:03

langben 发表于 2014-2-24 18:12
也就是说我只需要使用getData();就行了吗?
我用你的DEMO完全COPY出来,不修改任何代码, 然后将function ...

getData()获取的是所有的现有tree数据,也就是你界面上展现的相关数据,如果你remove掉,自然也不在getData()里面了
所以需要通过var removed = tree.getChanges("removed");
来获取删除的数据,官网的在线demo是不完整的,我们也说明了的
"在线演示,不提供保存,下载开发包内有此功能。"

你去看下载的试用包里面有这样的代码
var data = tree.getData();
    var removed = tree.getChanges("removed");
    var paramsObj = {
        data: mini.encode(data),
        removed: mini.encode(removed)
    }
作者: langben    时间: 2014-2-26 16:45:32

factory 发表于 2014-2-24 18:26
getData()获取的是所有的现有tree数据,也就是你界面上展现的相关数据,如果你remove掉,自然也不在getData( ...

谢谢,已解决。




欢迎光临 jQuery MiniUI (http://miniui.com/discuss/) Powered by Discuz! X2