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

QQ登录

只需一步,快速开始

查看: 3159|回复: 10

[处理中4] data组件如何手动定义和赋值?

[复制链接]

53

主题

179

帖子

304

积分

中级会员

Rank: 3Rank: 3

积分
304
QQ
发表于 2016-9-6 13:02:34 | 显示全部楼层 |阅读模式
我按照baasData组件的方式定义和赋值结果 运行时报错“Uncaught TypeError: this.comp is not a function”这是怎么回事呢?data组件到底如何定义个赋值呢?
var heiniaoData = this.comp("heiniaodata");
heiniaoData.setValue("id", "1");


1

主题

3232

帖子

1174

积分

金牌会员

Rank: 6Rank: 6

积分
1174
QQ
发表于 2016-9-6 13:20:36 | 显示全部楼层
你写的代码是没有错的,但是要注意this的用法,看一下当前的this指定的什么
在问题解决后,希望大家可以吧解决方法也分享一下,这样可以让更多的X5开发者共同进步,谢谢大家的知识共享
回复 支持 反对

使用道具 举报

53

主题

179

帖子

304

积分

中级会员

Rank: 3Rank: 3

积分
304
QQ
 楼主| 发表于 2016-9-6 13:45:07 | 显示全部楼层
我这个方法单独创立的
        Daybutton1Click = function(d) {
                var day = document.getElementById("idCalendarYear").innerHTML + '-' + document.getElementById("idCalendarMonth").innerHTML + '-' + d;
                var serviceData;
                justep.Baas.sendRequest({
                        "url" : "/gp/gp2",
                        "action" : "GetAppService",
                        "async" : false,
                        "params" : {
                                "day" : day
                        },
                        "success" : function(data) {
                                serviceData = data;
                        }
                });
                var heiniaoData = document.getElementById("heiniaodata");//this.comp("heiniaodata");
                heiniaoData.setValue("id", "1");
                heiniaoData.setValue("dangrishouyi", serviceData.dangrishouyi);
                var row = heiniaoData.getCurrentRow();
                this.comp('windowReceiver1').windowEnsure(row);
        }
这里this确实好像不能用,该如何解决这个问题呢?
回复 支持 反对

使用道具 举报

53

主题

179

帖子

304

积分

中级会员

Rank: 3Rank: 3

积分
304
QQ
 楼主| 发表于 2016-9-6 14:14:06 | 显示全部楼层
闰土 发表于 2016-9-6 13:20
你写的代码是没有错的,但是要注意this的用法,看一下当前的this指定的什么 ...

就是this的问题,在一个自己建的方法里 this指向怎么改呢?
回复 支持 反对

使用道具 举报

1

主题

3232

帖子

1174

积分

金牌会员

Rank: 6Rank: 6

积分
1174
QQ
发表于 2016-9-6 14:25:15 | 显示全部楼层
本帖最后由 闰土 于 2016-9-6 14:28 编辑

留住this,在方法的开始 定义 var self = this,然后用self.XXX,你这个方法 试试Model.XXX,试试吧,还有你自定义的方法,也要写成模块化的最好,就直接可以用this了就  Model.prototype.Daybutton1Click = function(arg){
   //代码块
}调用方法的时候 直接 this.Daybutton1Click(arg)
在问题解决后,希望大家可以吧解决方法也分享一下,这样可以让更多的X5开发者共同进步,谢谢大家的知识共享
回复 支持 反对

使用道具 举报

53

主题

179

帖子

304

积分

中级会员

Rank: 3Rank: 3

积分
304
QQ
 楼主| 发表于 2016-9-6 17:08:13 | 显示全部楼层
闰土 发表于 2016-9-6 14:25
留住this,在方法的开始 定义 var self = this,然后用self.XXX,你这个方法 试试Model.XXX,试试吧,还有 ...

我这个程序是生成一个日历,做了一些修改还是有问题。
        Model.prototype.modelLoad = function(event) {
                this.Draw(new Date());
        };
Model.prototype.Draw = function(dsy){
。。。其中动态生成butten
/ 创建button
                                                var btnEl = document.createElement('button');
                                                btnEl.setAttribute("value", d);
                                                btnEl.setAttribute("label", d);
                                                btnEl.setAttribute("class", "btn btn-default");
                                                btnEl.setAttribute("onClick", "Daybutton1Click(" + d + ");");
                                                btnEl.setAttribute("xid", d);
                                                btnEl.innerHTML = d;
。。。。。其中这个“Daybutton1Click()”方法 就不能写成 Model.prototype.Daybutton1Click的形式了。

Daybutton1Click = function(d) {
        var self=this;
。。。。。而这个方法中的this是window 对象 没有self.comp方法,导致我无法给data组件赋值,也无法把数据传回父页面。
回复 支持 反对

使用道具 举报

53

主题

179

帖子

304

积分

中级会员

Rank: 3Rank: 3

积分
304
QQ
 楼主| 发表于 2016-9-6 17:08:29 | 显示全部楼层
闰土 发表于 2016-9-6 14:25
留住this,在方法的开始 定义 var self = this,然后用self.XXX,你这个方法 试试Model.XXX,试试吧,还有 ...

我这个程序是生成一个日历,做了一些修改还是有问题。
        Model.prototype.modelLoad = function(event) {
                this.Draw(new Date());
        };
Model.prototype.Draw = function(dsy){
。。。其中动态生成butten
/ 创建button
                                                var btnEl = document.createElement('button');
                                                btnEl.setAttribute("value", d);
                                                btnEl.setAttribute("label", d);
                                                btnEl.setAttribute("class", "btn btn-default");
                                                btnEl.setAttribute("onClick", "Daybutton1Click(" + d + ");");
                                                btnEl.setAttribute("xid", d);
                                                btnEl.innerHTML = d;
。。。。。其中这个“Daybutton1Click()”方法 就不能写成 Model.prototype.Daybutton1Click的形式了。

Daybutton1Click = function(d) {
        var self=this;
。。。。。而这个方法中的this是window 对象 没有self.comp方法,导致我无法给data组件赋值,也无法把数据传回父页面。
回复 支持 反对

使用道具 举报

1

主题

3232

帖子

1174

积分

金牌会员

Rank: 6Rank: 6

积分
1174
QQ
发表于 2016-9-6 17:15:40 | 显示全部楼层
你现在的这个this。指定的window,你是动态创建了一个按钮,然就给这个按钮绑定click 事件,而这个按钮最终是要放到dom树上的,这个click事件 为什么不能写成 Model.prototype呢? 你仿照源码的方式去调用 试一下
在问题解决后,希望大家可以吧解决方法也分享一下,这样可以让更多的X5开发者共同进步,谢谢大家的知识共享
回复 支持 反对

使用道具 举报

53

主题

179

帖子

304

积分

中级会员

Rank: 3Rank: 3

积分
304
QQ
 楼主| 发表于 2016-9-7 09:32:22 | 显示全部楼层
闰土 发表于 2016-9-6 17:15
你现在的这个this。指定的window,你是动态创建了一个按钮,然就给这个按钮绑定click 事件,而这个按钮最终 ...

我把这个方法改成   
Model.prototype.Daybutton1Click = function(d) {
。。。。。。。。。。。。。

在创建的地方没有变化还是
// 创建button
                                                var btnEl = document.createElement('button');
                                                btnEl.setAttribute("value", d);
                                                btnEl.setAttribute("label", d);
                                                btnEl.setAttribute("class", "btn btn-default");
                                                btnEl.setAttribute("onClick", "Daybutton1Click(" + d + ");");
但是点击这些生成的按钮的时候会报错说 Daybutton1Click 没有定义
QQ截图20160907092905.png
回复 支持 反对

使用道具 举报

53

主题

179

帖子

304

积分

中级会员

Rank: 3Rank: 3

积分
304
QQ
 楼主| 发表于 2016-9-7 09:44:29 | 显示全部楼层
解决了,多谢,多谢!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-24 16:22 , Processed in 0.058991 second(s), 26 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

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