jQuery MiniUI

标题: datagrid 更新数据失败 [打印本页]

作者: stone1314    时间: 2015-1-16 13:52:20     标题: datagrid 更新数据失败

  mini.open({
        url: "WfFlowStep.aspx?Type=" + Type,
        onload: function() {
                var data = parent.getStepNameId();
                var iframe = this.getIFrameEl();
                var cbox = iframe.contentWindow.mini.get("cbox2");
                cbox.setData(data);
        },
        ondestroy: function(action) {
            var iframe = this.getIFrameEl();
            var data = iframe.contentWindow.NewStepObj;
            var grid = mini.get("datagridStepMsg");
          if (action == "update") {
                var selectRow = grid.getSelected();
                var updateRow = { Data: null }; //,where:data.data
                grid.updateRow(selectRow, updateRow);
            }
        }
    });
在最后红色的步骤会 报错,提示说
SCRIPT5011: 不能执行已释放 Script 的代码
miniui.js, 行8 字符325554
求解 怎么解决?是什么原因?(在IE10中会报该错误)


作者: dforce    时间: 2015-1-16 14:25:54

请提供一个能完整重现问题的简单页面
作者: stone1314    时间: 2015-1-16 14:42:12

dforce 发表于 2015-1-16 14:25
请提供一个能完整重现问题的简单页面

页面一
<html>
<body>
<javascript>
mini.open({
        url: "WfFlowStep.aspx?Type=" + Type,
        onload: function() {
                var data = parent.getStepNameId();
                var iframe = this.getIFrameEl();
                var cbox = iframe.contentWindow.mini.get("cbox2");
                cbox.setData(data);
        },
        ondestroy: function(action) {
            var iframe = this.getIFrameEl();
            var data = iframe.contentWindow.NewStepObj;
            var grid = mini.get("datagridStepMsg");
          if (action == "update") {
                var selectRow = grid.getSelected();
                var updateRow = { Data: null }; //,where:data.data
                grid.updateRow(selectRow, updateRow);
            }
        }
    });
</javascript>
<input type='button' onclick="ShowStep()" />
<div id="datagridStepMsg" class="mini-datagrid" style="width: 99%;" onrowdblclick="stepRowClick"
                        url="/Ajax/WorkFlowDetail.ashx" idfield="FID" allowresize="true" showfooter="false"
                        allowcellselect="true" allowmovecolumn="false">
                        <div property="columns">
                            <div field="StepName" width="" headeralign="center" align="left">
                                步骤名称</div>
                            <div field="StepNote" width="" headeralign="center" align="left">
                                步骤描述</div>
                            <div field="StepTypeID" width="" visible="false" headeralign="center" align="left">
                                类型ID</div>
                            <div field="StepTypeName" width="" headeralign="center" align="left">
                                类型</div>
                            <div field="FID" width="" visible="true" headeralign="center" align="left">
                                FID</div>
                            <div field="Data" width="" visible="false" headeralign="center" align="left">
                                Data</div>
                        </div>
                    </div>
<body>
<html>

页面二
<html>
<body>
    <div id="form1">
</div>
</html>


差不多就是这个样子了

作者: dforce    时间: 2015-1-16 15:02:04

stone1314 发表于 2015-1-16 14:42
页面一

[attach]5807[/attach]
按照你的代码写了一下貌似没报错,你测试一下
一般报你那个错误是引用到关闭页面的数据了,看你贴的代码又好像没用到


作者: stone1314    时间: 2015-1-16 15:21:10

dforce 发表于 2015-1-16 15:02
按照你的代码写了一下貌似没报错,你测试一下
一般报你那个错误是引用到关闭页面的数据了,看你贴的代码 ...


[attach]5808[/attach]

  也是有的

碰见这样的情况 怎么弄呢?

作者: dforce    时间: 2015-1-16 15:30:34

stone1314 发表于 2015-1-16 15:21
也是有的

碰见这样的情况 怎么弄呢?

ondestory里面
var data=iframe....
var newData=mini.clone(data)  克隆一下,后面用这个数据看看
作者: stone1314    时间: 2015-1-16 15:52:01

dforce 发表于 2015-1-16 15:30
ondestory里面
var data=iframe....
var newData=mini.clone(data)  克隆一下,后面用这个数据看看 ...

好奇怪    我直接走“  var grid = mini.get("datagridStepMsg");
                            var selectRow = grid.getSelected();
                             var updateRow = { Data: null }; //,where:data.data
                            grid.updateRow(selectRow, updateRow); ”
更新列的时候才报  那个错,引用数据的代码我都注释掉了
作者: dforce    时间: 2015-1-16 16:05:08

stone1314 发表于 2015-1-16 15:52
好奇怪    我直接走“  var grid = mini.get("datagridStepMsg");
                            var sel ...

我发那个例子也会报你那个错误吗?
本地测试没问题的
作者: stone1314    时间: 2015-1-16 16:07:29

dforce 发表于 2015-1-16 16:05
我发那个例子也会报你那个错误吗?
本地测试没问题的

嗯  你发的例子 没问题的
作者: stone1314    时间: 2015-1-16 16:24:21

dforce 发表于 2015-1-16 16:05
我发那个例子也会报你那个错误吗?
本地测试没问题的

我在想  是不是 grid控件 是不是 被占用着  所以报这个错?
作者: dforce    时间: 2015-1-16 16:33:27

stone1314 发表于 2015-1-16 16:24
我在想  是不是 grid控件 是不是 被占用着  所以报这个错?

那只能你那边简化页面慢慢找了
作者: stone1314    时间: 2015-1-19 13:47:59

dforce 发表于 2015-1-16 16:33
那只能你那边简化页面慢慢找了

我发现规律了,主界面中有grid,弹跳页中向主页面中添加一条记录,然后 再在弹跳也中修改grid的新添加的记录,当grid调用updateRow的时候,   就会报错了,是不是因为grid被释放的原因呢??

mini.open({
        url: "WfFlowStep.aspx?Type=" + Type + "&mouldId=" + MouldID + "&StepFID=" + StepFID + "&Operate=" + Operate + "&FlowId=" + $("#FlowId").val(),
        title: stepName, width: 1100, height: 900,
        onload: function() {
        },
        ondestroy: function(action) {
            var iframe = this.getIFrameEl();
            var data = iframe.contentWindow.NewStepObj;
            if (action == "ok") {
                var grid1 = mini.get("datagridStepMsg");
                var FID = getFID('saStep');
                data.TableName = $("#TableName").val();
                data.FID = FID;
                var newRow = { StepName: data.StepName, StepNote: data.StepNote, StepTypeID: data.stepTypeID, StepTypeName: data.stepTypeName, FID: FID, Data: data }; //,where:data.data
                var length = grid1.data.length;
                grid1.addRow(newRow, length);
                grid1.deselectAll();
                grid1.select(newRow);
            } else if (action == "update") {
                var grid = mini.get("datagridStepMsg");
                var selectRow = grid.getSelected();

                var updateRow = { Data: null }; //,where:data.data
                grid.updateRow(selectRow, updateRow);

                var updateRow = { StepName: data.StepName, StepNote: data.StepNote, Data: data }; //,where:data.data

                grid.updateRow(selectRow, updateRow);
                grid.deselectAll();
                grid.select(updateRow);
            }
        }
    });
作者: felt    时间: 2015-1-19 14:09:40

stone1314 发表于 2015-1-19 13:47
我发现规律了,主界面中有grid,弹跳页中向主页面中添加一条记录,然后 再在弹跳也中修改grid的新添加的 ...

做个完整的例子打包上来吧




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