起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 4175|回复: 6

[结贴] setFilter过滤数据

[复制链接]

186

主题

1012

帖子

1663

积分

金牌会员

Rank: 6Rank: 6

积分
1663
QQ
发表于 2017-4-13 21:08:37 | 显示全部楼层 |阅读模式
例如在onValueChanged事件中。
其中两个input不为空的时候满足条件,并去执行这个setFilter,没有数据的时候会过滤出undefined。
之后再去改变这两个input的值,还会执行这个setFilter,但是过滤的时候会先拿到undefined,而不是该有的数据,循环到第二次的时候才是想要拿到的数据。为什么?


91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
36067
发表于 2017-4-14 09:48:40 | 显示全部楼层
为什么要在值改变事件中去设置filter?
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

186

主题

1012

帖子

1663

积分

金牌会员

Rank: 6Rank: 6

积分
1663
QQ
 楼主| 发表于 2017-4-14 10:17:56 | 显示全部楼层
jishuang 发表于 2017-4-14 09:48
为什么要在值改变事件中去设置filter?

因为,要在这个值改变的时候需要,满足条件的情况下要做的汇总。然后更新掉表里的一些字段的值。
比如我要申请一个消费金额。当申请的日期和申请人满足条件的时候,就会去预算表里面拿到当前日期里面能申请的消费总额,如果这个日期里面有总金额,就会过滤出这个日期的总金额数据出来,没有的话就为空或者是0或者是undefined。当这个总金额不为空的时候,我又设置了一个action去查找当前表所有申请过的,审批的,通过审批的,终止的数据。消费金额超过这个月的预算,就不能申请。可以申请的额度=总额 - 通过审批总额 - 审批中总额。
回复 支持 反对

使用道具 举报

186

主题

1012

帖子

1663

积分

金牌会员

Rank: 6Rank: 6

积分
1663
QQ
 楼主| 发表于 2017-4-14 10:20:32 | 显示全部楼层
        实现代码如下:
Model.prototype.mainDataValueChanged = function(event) {
                var self = this;
                if (event.col == "fKHQ" || event.col == "fDeptID" || event.row.val("FCOSTITEM")) {
                        // 获取预算总额
                        if (event.row.val("FCOSTITEM") && event.row.val("fKHQ") && event.row.val("fKSSHIJIAN") && event.row.val("fJSSJ") && event.row.val("fYear") && event.row.val("fDeptID")) {
                                debugger;
                                this.comp("ysuuanData2").filters.clear();
                                this.comp("ysuuanData2").refreshData();
                                this.comp("ysuuanData2").setFilter(
                                                "yusuanzonge",
                                                "fBDKFTKGJX= '" + event.row.val("FCOSTITEM") + "' and  FYEAR = '" + event.row.val("fYear") + "' and fKHQ = '" + event.row.val("fKHQ") + "'  and  sOrgID = '"
                                                                + event.row.val("fDeptID") + "' and  fDocumentStatus=2 and fIsNew=1");
                                this.comp("ysuuanData2").refreshData();
                                var yusuanzonge = this.comp("ysuuanData2").getValue("fTotal");
                                this.comp("mainData").setValue("fYSZE", yusuanzonge);
                                console.log("预算金额" + yusuanzonge);
                                if (yusuanzonge == '' || yusuanzonge == null || yusuanzonge == undefined) {
                                        justep.Util.hint("预算金额为空,请确保最新版的预算申请,审批完成后再添加!");
                                }
                                var param = new biz.Request.ActionParam();
                                param.setString('khq', event.row.val("fKHQ"));
                                param.setString('year', event.row.val("fYear"));
                                param.setString('org', event.row.val("fDeptID"));
                                param.setString('fyfl', event.row.val("FCOSTITEM"));
                                param.setString('fid', this.comp("mainData").getCurrentRowID());
                                biz.Request.sendBizRequest({
                                        contentType : "application/json",
                                        dataType : "application/json",
                                        process : "/aojing/gp/process/gp_sampleApply/gp_sampleApplyProcess",
                                        activity : "sampleApplyPage",
                                        action : "getSampleYSAction",
                                        directExecute : true,
                                        parameters : param,
                                        callback : function(evtData) {
                                                if (evtData.state) {
                                                        debugger;
                                                        var rows = evtData.response;
                                                        self.comp("mainData").setValue("fSPZZE", rows.spzje);
                                                        self.comp("mainData").setValue("fYTGSPZE", rows.hyspje);
                                                        self.comp("mainData").setValue("fSYTBZE", getDiff(rows.ysje, rows.hyspje, rows.spzje));
                                                } else {

                                                }
                                                // evtData.ignoreError = false;
                                        }
                                });
                        }
                }
                // 计算剩余填报总额
                function getDiff(arg1, arg2, arg3) {
                        if (arg1 && arg2 && arg3) {
                                return Number(arg1) - Number(arg2) - Number(arg3);
                        } else
                                return "";
                }
        };

回复 支持 反对

使用道具 举报

186

主题

1012

帖子

1663

积分

金牌会员

Rank: 6Rank: 6

积分
1663
QQ
 楼主| 发表于 2017-4-14 11:03:22 | 显示全部楼层
本帖最后由 波斯大香蕉 于 2017-4-14 12:58 编辑
jishuang 发表于 2017-4-14 09:48
为什么要在值改变事件中去设置filter?

像这样手动去改变值了之后,只能是当条数据显示的那个数据的值,跟着windowDialog的mapping传过来的另外的值还是不会跟着一起改变。例如,我一个input。要显示的是时间。mapping传过来的是时间,时间的ID。选择的时候只改变了当前行需要显示的时间的值,id却没变。还是上次的数据。
开始选的是 2017-4-14  ID是4
第二次选的时间是 2017-5-14 ID是4 实际上应该是5
第三次选的时间是 2017-6-14 ID是5 实际上应该是6
再选一次的时间是 2017-4-14 ID就是6 实际上应该是4

已经设置了修改当前行数据。是因为写在onValueChanged的原因才会这样吗?
回复 支持 反对

使用道具 举报

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
36067
发表于 2017-4-14 13:43:43 | 显示全部楼层
你说的是ID是主键值还是某个关系的值?
mapping中设置的正确吗?在windowDialog的onReceiver事件中看看返回的数据正确吗?
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

186

主题

1012

帖子

1663

积分

金牌会员

Rank: 6Rank: 6

积分
1663
QQ
 楼主| 发表于 2017-4-14 13:52:40 | 显示全部楼层
if (event.col == "fKHQ" || event.col == "fDeptID" || event.row.val("FCOSTITEM"))

解决了,结贴吧, event.row.val("FCOSTITEM")写错了,应该是 event.col ,这样就对了。_(:з」∠)_ 粗心了。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2024-11-23 18:32 , Processed in 0.061640 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表