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

QQ登录

只需一步,快速开始

查看: 4255|回复: 7

[处理中3] 动态生成timer组件时,绑定onTimer事件的函数怎样自动生成

[复制链接]

56

主题

111

帖子

285

积分

中级会员

Rank: 3Rank: 3

积分
285
QQ
发表于 2018-3-26 14:15:21 | 显示全部楼层 |阅读模式
timer.js应该是个对象定义文件。我看了这个文件,以及demo中的动态创建timer的例子。问题1、new timer() 的时候怎样通过API生成onTimer这个事件对应的函数。
我看例子中,var option = {model:this,onTimer:this.dtimerTimer.bind(this)};
dtimerTimer对应的绑定
Model.prototype.timerTimer = function(event) {
                this.comp('output').set('value','------执行了'+event.times+'次------');
        };
不是自动生产的。
如果我一个js页面中需要动态生成  5 个Timer.这个绑定的处理onTimer事件的函数,需要怎样方便的生成?


举个例子:
要实现如图11所示的效果,就是在实际投料量该列下面,单击每行的该列输入框,都出现如图22所示的windialog输入对话框,
然后,通过返回的参数,调用第三方实时数据库的webAPI,按照设定的周期,不断刷新显示实时数据。
按照要求:只写一个动态生成的timer组件,无法实现目标。因为激活不同的当前行,其他行的实际投料量字段,要么不定期刷新,要么上下数据不独立,是共用的。



问题2、目前有没有更好封装的timer()构造函数
           例如:var dtimer = new timer(名称,间隔时间,处罚次数,是否启动,onTime绑定的函数);
           这样便于动态生产多个timer()。这种场景工控领域能用的到

问题3、图片中的案例,请问官方有没有比较好的实现方案。
11.jpg
22.jpg

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
36185
发表于 2018-3-26 15:13:57 | 显示全部楼层
应该是定义一个timer就可以吧,打开弹出框操作后就关闭了,然后再重新打开的啊

动态创建组件绑定事件参考http://doc.wex5.com/?p=4202#2.2
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



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

使用道具 举报

56

主题

111

帖子

285

积分

中级会员

Rank: 3Rank: 3

积分
285
QQ
 楼主| 发表于 2018-3-27 10:41:57 | 显示全部楼层
看了动态创建组建的参考,然后实践了一下,感觉还是不能生成timer对象。
代码如下:目标:在从表中,每生成一行,以当前行号作为Map变量的Key,创建一个timer对象,采用AfterNew事件。
Model.prototype.detailDataAfterNew = function(event) {

                var data = this.comp('detailData');// 获取从表当前数据集
                var curRowID = data.getCurrentRowID(); // 获取当前行rowID
                // 以当前行号作为key,生成timer
                var option = {
                        model : this
                };  //这一句与demo案例略有不同,因为demo中的那种写法,我不会

                var interval = this.cycleMap[curRowID];// 获取前端windowdialog对话框返回的间隔周期
                if (interval) { // 如果前端windowdialog对话框间隔周期返回成功
                        option.interval = justep.String.toInt(interval, 1000);
                } else {
                        option.interval = 1000;// 如果 interval未定义,设为默认值
                }
                var times = this.timesMap[curRowID];// 获取前端windowdialog对话框返回的执行次数
                if (times) {
                        option.times = justep.String.toInt(times, 0);
                } else { // 如果未定义,设为默认值
                        option.times = 0;
                }
                option.xid = data.getCurrentRowID(); // 设置动态生成的timer xid
                this.timerMap[curRowID] = new Timer(option); // 动态生产timer对象,保存在一个Map类型全局变量里面
                this.timerMap[curRowID].on("onTimer", function(event) {
                alert(JSON.stringify(this.timerMap[curRowID]));//动态生产的timer对象,转换成json显示
               
                });

测试中,this.timerMap[curRowID].on("onTimer",     这个事件能每秒触发一个alert,提示信息为
Cannot read property 'E4D4E035141448BAB46BAE268647A5EE' of undefined

应该是timer对象未生成吧,上面的代码哪地方有问题?
是Map类型的变量,key对应的value  这个对象必须分配一个具体名字的对象吗?不能直接存储new()


demo案例.jpg
22测试结果.jpg
回复 支持 反对

使用道具 举报

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
36185
发表于 2018-3-27 13:21:12 | 显示全部楼层
把option中的onTimer去掉

现在写on就可以
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



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

使用道具 举报

56

主题

111

帖子

285

积分

中级会员

Rank: 3Rank: 3

积分
285
QQ
 楼主| 发表于 2018-3-27 13:36:09 | 显示全部楼层
我试过 把option中的onTimer去掉不行,只有带着onTimer才能成功创建对象。
回复 支持 反对

使用道具 举报

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
36185
发表于 2018-3-27 13:49:30 | 显示全部楼层
怎么不行了?这个不是可以执行吗?
timer.png
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



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

使用道具 举报

56

主题

111

帖子

285

积分

中级会员

Rank: 3Rank: 3

积分
285
QQ
 楼主| 发表于 2018-3-27 17:13:21 | 显示全部楼层
从表已经能够生成实时数据,如图:
问题:1、第一行生成1秒刷新一次的数据后,切换到第二行,第二行显示实时数据,第一行就不刷新显示了;
          2、当定位到第一行,1行显示,2行不显示,并且两行的数据都来自于一个采集点。这两行的采集点应该分开才对。


11.jpg
回复 支持 反对

使用道具 举报

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
36185
发表于 2018-3-27 17:29:45 | 显示全部楼层
不明白什么意思?数据是data上的,刷新后要看看data上的数据是否存在啊
操作了什么不显示数据就在对应的事件中跟踪看看data中是否有数据
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-8 01:21 , Processed in 0.065272 second(s), 27 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

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