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

QQ登录

只需一步,快速开始

查看: 1958|回复: 9

[结贴] 关于baasdata的几个问题

[复制链接]

116

主题

276

帖子

510

积分

高级会员

Rank: 4

积分
510
QQ
发表于 2017-5-17 16:38:53 | 显示全部楼层 |阅读模式
本帖最后由 jjsun 于 2017-5-17 17:42 编辑

Webx5版本3.6,使用SQLServer数据库
问题:
1.baasData设置过滤条件,是否必须在data的右键中增加过滤条件后,才能在代码中调用setFilter?还是可以直接调用setFilter.在data上增加过滤条件和不增加直接调用,不知道有什么区别?

2.使用baasdata,开发环境中如何显示sql日志?类似bizdata的sql显示

3.使用scrollView+list+row+baasdata显示数据,如果baasdata查询的后台数据返回为空时,如何在前端页面显示一个自定义的提示信息,如“无符合查询条件的记录”等?缺省页面上显示“加载更多”或者“已经到最后”(这是scrollView组件的提示)
11.PNG


4.使用scrollView+list+row+baasdata显示数据,设置:list.autoload=true,baasdata.autoload =false,在select关联的cdata的onDataChang事件中代码执行baasdata.refreshData加载数据,即当select下拉列表的值发生变化(关联的cdata值变化),根据下拉列表选择的值,增加baasdata的filter,加载不同的数据。当程序第一次运行时(浏览器首次打开首页),data数据好像加载了2次,且设置的过滤条件无效。
//select关联data的onDataChange事件,刷新baasdata        
Model.prototype.qryDayDataDataChange = function(event){
                var row = event.row; //event.source.getCurrentRow();
                if (typeof(row) == 'undefined' || row.val('selDate') === '')
                        return;
                console.log("**qryDayDataDataChange,row="+row.val('selDate'));
                var md = this.comp('mainData');
                md.filters.clear();
                md.setFilter('filterDate',"sjd0 = '" + row.val('selDate') + "' ");
                console.log("**qryDayDataDataChange,filters="+md.filters.toString());
                md.refreshData();
        };

//baasdata的onAfterRefresh事件,测试baasdata是否刷新完成
        Model.prototype.mainDataAfterRefresh = function(event){
                console.log("**mainDataAfterRefresh,filters="+this.comp('mainData').filters.toString());
        };

首次打开页面,浏览器控制台中显示 baasdata的onAfterRefresh事件 好像执行了2次,qryData的onDataChange事件只执行了1次。
22.PNG


另外,在qryData的onDataChange事件中设置过滤条件也没有生效,虽然控制台打印baasdata的过滤条件是对的(sjd0=2017-05-17),但实际加载的数据不对。如上图中前3条数据应该是5-18日的数据。
点击下拉列表改变值后,baasdata的数据加载正常。

如果设置:list.autoload=true,baasdata.autoload =true,其他不变,页面显示的数据是对的,即没有5-18的3条数据。
但是baasdata实际上也执行了2次,第1次filter为空,如何只执行一次? w文件见 lylfapp.zip (3.2 KB, 下载次数: 65)
发表于 2017-5-17 18:03:15 | 显示全部楼层
1.可以 动态执行
  1. var data=this.comp('dataXid');
  2. data.setFilter('filter1',"ID='值'");
  3. data.refreshData()
复制代码


2.BaasServer 没有地方可以配置打印sql日志!

3.http://docs.wex5.com/wex5-ui-question-list-2074

4.这个问题描述好长啊!没太完全理解,可以继续问,说清楚写

list 的 autoload=true,或导致data 进行数据请求的!
filter动态设置 可以参考http://docs.wex5.com/wex5-ui-question-list-2031/

onAfterRefresh执行了两次说明data刷新 了两次!可能第一次默认执行了,和list的autoload=true有关
filter 条件以第二次设置为准的! 可以打印一下这个条件,自己在数据库管理工具中执行一下,查询的数据正确吗??

至于执行次数的问题!自己再仔细测试下吧!如果data刷新了就会执行onAfterRefresh 如果 值改变了就会触发onDataChange,,自己调试测试一下吧!

5.http://docs.wex5.com/debug-user-own-java-code/
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

116

主题

276

帖子

510

积分

高级会员

Rank: 4

积分
510
QQ
 楼主| 发表于 2017-5-18 09:15:48 | 显示全部楼层
本帖最后由 jjsun 于 2017-5-18 09:34 编辑
liangyongfei 发表于 2017-5-17 18:03
1.可以 动态执行

2.BaasServer 没有地方可以配置打印sql日志!

第3个问题:不是要修改scrollView组件的提示文字,而是要求在保留scrollView组件的提示文字的基础上,当list关联的data组件查询后台返回为空时,页面上增加一个类似提示“没有符合条件的记录。。
或者当data返回为空时(当设置了过滤条件时,查询返回空),隐藏scrollView组件的提示文字

第4个问题的核心需求就是:要求页面初始访问时baasdata只加载一次,加载时需要有一定的查询条件的(filter要设置的)。
如果 list.autoload如果不设为true,即使data刷新了,list显示的数据也不自动同步更新。
如果 baasdata.autoload设置为true,首次打开页面时,这个baasdata会被自动加载一次,此时加载数据没有设置过滤条件。由于我的需求中baasdata加载数据是需要先设置过滤条件的且条件对应的参数值是动态的,所以我在另外一个data的ondatachange事件中设置这个baasdata的filter,然后代码调用baasdata.refreshdata重新加载数据。因此我把baasdata.autoload设置为false(不自动加载)。但现在这么做,日志显示该baasdata.onAfterRefresh事件被连续执行了2次(2次打印的日志中filter条件值显示都是对的)。
不知道第2次的执行是怎么回事?
而且,页面显示的数据与设置的过滤条件不对应(显示的数据 不是 设置过滤条件应该返回的数据,下图左侧最上面的圈中的3条数据不应该是 filters=(sjd0=2017-05-17)过滤条件对应的查询结果)







回复 支持 反对

使用道具 举报

发表于 2017-5-18 10:05:57 | 显示全部楼层
jjsun 发表于 2017-5-18 09:15
第3个问题:不是要修改scrollView组件的提示文字,而是要求在保留scrollView组件的提示文字的基础上,当li ...

三:
1.可以使用bind-visible属性绑定一个 自定义函数,在函数中计算data.count()  确定是否隐藏
2. 也可以使用contents组件 ,如果data.count() 等于0就切换到另一个页面片段,显示调试数据为空
3.可以给scrollView 赋值为空字符串  ,或者直接赋值为 :没有符合条件的记录。。  不就可以了吗??

四:
baasData 和 list 的autoload 都设置为 false  不要默认加载数据和刷新
var data=this.comp('dataXid');
var list=this.comp('listXid');
data.setFilter('filter1',"ID='值'");
list.refresh(true);

即可!


使用代码控制!需要刷新的时候,调用
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

116

主题

276

帖子

510

积分

高级会员

Rank: 4

积分
510
QQ
 楼主| 发表于 2017-5-18 12:11:31 | 显示全部楼层
liangyongfei 发表于 2017-5-18 10:05
三:
1.可以使用bind-visible属性绑定一个 自定义函数,在函数中计算data.count()  确定是否隐藏
2.  ...

第4个问题,解决。通过调用list.refresh(true)只加载1次.

第3个问题:“3.可以给scrollView 赋值为空字符串  ,或者直接赋值为 :没有符合条件的记录。。”,在什么地方设置scrollView组件的noMoreLoadLabel值呢?我的代码是在data.onDateChange事件中设置baasdata的filter并加载数据,如果在list.refresh(true);代码后面增加如下判断代码:
                if (md.count() === 0){
                        this.comp('scrollView1').noMoreLoadLabel = "没有符合条件的记录.";
                }else{
                        this.comp('scrollView1').noMoreLoadLabel = "已经到最后.";
                }
需求是:当更改过滤条件导致data返回为空时,显示“没有符合条件的记录”;
如果data返回不为空,下滑屏幕加载更多时,应显示“已经到最后”。同时要求,这2种提示不能同时出现
如果实现?切换到另外content不合适,用bind-visible可能会导致2种提示同时出现
回复 支持 反对

使用道具 举报

发表于 2017-5-18 13:19:02 | 显示全部楼层
jjsun 发表于 2017-5-18 12:11
第4个问题,解决。通过调用list.refresh(true)只加载1次.

第3个问题:“3.可以给scrollView 赋值为空字 ...

可以在data组件的 onAfterRefresh 事件中 判断data中是否有数据,
写你这段代码!! data每次刷新都会触发 onAfterRefresh  的!
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

116

主题

276

帖子

510

积分

高级会员

Rank: 4

积分
510
QQ
 楼主| 发表于 2017-5-18 13:30:29 | 显示全部楼层
liangyongfei 发表于 2017-5-18 13:19
可以在data组件的 onAfterRefresh 事件中 判断data中是否有数据,
写你这段代码!! data每次刷新都会触 ...

效果依旧不行的,
        Model.prototype.mainDataAfterRefresh = function(event){
                console.log("**mainDataAfterRefresh,filters="+this.comp('mainData').filters.toString()+",count="+this.comp('mainData').count());
                var count = this.comp('mainData').count();
                if (event.source.count() === 0){
                        this.comp('scrollView1').noMoreLoadLabel = "没有符合条件的记录.";
                }else{
                        this.comp('scrollView1').noMoreLoadLabel = "已经到最后.";
                }
        };
回复 支持 反对

使用道具 举报

发表于 2017-5-18 14:08:49 | 显示全部楼层
jjsun 发表于 2017-5-18 13:30
效果依旧不行的,
        Model.prototype.mainDataAfterRefresh = function(event){
                console.log("**mainDat ...

建议debugger调试跟一下代码!

这行代码this.comp('scrollView1').noMoreLoadLabel = "没有符合条件的记录.";
确定执行了吗??
而执行后确定是没有生效吗??

估计是条件没执行到吧!如果执行代码后应该就可以生效的!
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

116

主题

276

帖子

510

积分

高级会员

Rank: 4

积分
510
QQ
 楼主| 发表于 2017-5-18 14:58:59 | 显示全部楼层
liangyongfei 发表于 2017-5-18 14:08
建议debugger调试跟一下代码!

这行代码this.comp('scrollView1').noMoreLoadLabel = "没有符合条件的记 ...

谢谢梁工,已解决,结贴
回复 支持 反对

使用道具 举报

发表于 2017-5-18 15:27:32 | 显示全部楼层
jjsun 发表于 2017-5-18 14:58
谢谢梁工,已解决,结贴

解决方法
this.comp('scrollView').refresh()
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-22 04:35 , Processed in 0.086882 second(s), 26 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

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