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

QQ登录

只需一步,快速开始

查看: 2358|回复: 7

[结贴] output输出值如何操作涉及回调函数

[复制链接]

10

主题

18

帖子

72

积分

初级会员

Rank: 2

积分
72
QQ
发表于 2017-2-27 19:25:52 | 显示全部楼层 |阅读模式
不涉及回调函数时,output可以正常输出字段值:
Model.prototype.modelLoad = function(event) {

typeval = typeval(type); // 设备类型解析

this.comp("devicetype").set({
                        "value" : typeval
                });
}

function typeval(type) {// 设备类型解析, 或者改为查本地数据库表/IM数据库表      不涉及回调函数时,output可以正常输出字段值
                var typename;
                switch (type) {
                case 1:
                        typename = "WIN-PC";
                        break;
                case 2:
                        typename = "MAC-PC";
                        break;}
                return typename;
        }



涉及回调函数时,output如何输出字段值?
Model.prototype.modelLoad = function(event) {

address = addressval(lnglat); // 地址解析

this.comp("addressval").set({
                        "value" : address
                });
}


        function addressval(lnglatXY) {// 地址解析      
                var address;
                var geocoder = new AMap.Geocoder({
                        radius : 1000,
                        extensions : "all"
                });
                geocoder.getAddress(lnglatXY, function(status, result) {
                        if (status === 'complete' && result.info === 'OK') {
                                address = result.regeocode.formattedAddress; // 返回地址描述          涉及回调函数时,可以alert出地址信息,output如何输出字段值?
                                return address;
                        }
                });
        }

发表于 2017-2-28 09:58:38 | 显示全部楼层
1.将 var address  定义为全局变量!在回调中赋值!(同步执行的代码回调才起作用!)
2.调用addressval的时候,将一个js对象的参数传递进去,然后回调中给此js对象赋值!也可以!
3.直接将方法
  1. this.comp("addressval").set({
  2.                         "value" : address
  3.                 });
复制代码

写在回调函数中,注意,需要在回调外边定义var me = this
里面使用me.comp方法
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

10

主题

18

帖子

72

积分

初级会员

Rank: 2

积分
72
QQ
 楼主| 发表于 2017-2-28 11:11:21 | 显示全部楼层
试验了不可以,提示 me.comp()  is  not a function。                                                                                                         

在调用函数(里面没有回调函数)里写output的设置语句发现不可以用,调用函数里涉及到回调函数更加有问题。

更改成HTML input元素测试,也是弹窗提示错误:   me.getElementByXid("input1").innerHTML = address;

C:\Users\peterliu\Desktop\无标题.png
回复 支持 反对

使用道具 举报

10

主题

18

帖子

72

积分

初级会员

Rank: 2

积分
72
QQ
 楼主| 发表于 2017-2-28 11:12:43 | 显示全部楼层
me.getElementByXid is not a function
隐藏详细
TypeError: me.getElementByXid is not a function at http://localhost:8080/x5/UI2/v_03744278581047e98e4e65ae0ca0023fl_zh_CNs_desktopd_pc/teamtalkxwdev/devMain.js:218:20 at c.P.QB.P.U.extend.qT (eval at <anonymous> (eval at <anonymous> (http://webapi.amap.com/maps?v=1. ... Map.Geocoder:18:195)), <anonymous>:1:3979) at c.eval (eval at <anonymous> (eval at <anonymous> (http://webapi.amap.com/maps?v=1. ... Map.Geocoder:18:195)), <anonymous>:1:1088) at c.P.ca.l (eval at <anonymous> (http://webapi.amap.com/maps?v=1. ... Map.Geocoder:18:195), <anonymous>:31:352) at window.(anonymous function) (eval at <anonymous> (eval at <anonymous> (http://webapi.amap.com/maps?v=1. ... Map.Geocoder:18:195)), <anonymous>:1:1453) at http://restapi.amap.com/v3/geoco ... location=113.990988,22.681615&radius=1000&extensions=all&callback=jsonp_765479_&platform=JS&logversion=2.0&sdkversion=1.3&appname=http%3A%2F%2Flocalhost%3A8080%2Fx5%2FUI2%2Fv_%2Fteamtalkxwdev%2FdevMain.w%3F%24ownerid%3DC76EB03BE050000144A566F41D7019B7%23!&csid=BA04E3CD-C291-4709-8499-273283BE6B00:1:1
回复 支持 反对

使用道具 举报

发表于 2017-2-28 14:41:58 | 显示全部楼层
zgpeter 发表于 2017-2-28 11:12
me.getElementByXid is not a function
隐藏详细
TypeError: me.getElementByXid is not a function at htt ...

me.comp()  is  not a function
说明me这个变量没有定义呀,你需要在外层定义一个变量me ! 可以定义为全局变量,只要他赋值了model对象的this ,肯定就可以使用的!
请问你的变量me是在哪儿赋值的?
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

10

主题

18

帖子

72

积分

初级会员

Rank: 2

积分
72
QQ
 楼主| 发表于 2017-2-28 15:27:10 | 显示全部楼层
请帮忙看看那里出了问题:

define(function(require) {
        var $ = require("jquery");
        var justep = require("$UI/system/lib/justep");
        require("http://webapi.amap.com/maps?v=1.3&key=c5a05248e534bb18c39ae266093088d3&plugin=AMap.Geocoder");
        require("http://cache.amap.com/lbs/static/addToolbar.js");

        var Model = function() {   
                this.callParent();
        };

        var address;          全局变量定义
        var me = this;

Model.prototype.modelLoad = function(event) {

addressval(lnglat); // 地址解析    引用函数

}


function addressval(lnglatXY) {// 地址解析
                // var address;
                // var me = this;
                var geocoder = new AMap.Geocoder({
                        radius : 1000,
                        extensions : "all"
                });
                geocoder.getAddress(lnglatXY, function(status, result) {
                        if (status === 'complete' && result.info === 'OK') {
                                address = result.regeocode.formattedAddress; // 返回地址描述
                                alert(address);                          可以alert出address地址
                                me.comp("addressval").set({      回调函数内设置output (xid = addressval) 的值
                                "value" : address
                        });
                        
                        }
                });

          }


        return Model;
});



提示:
me.comp is not a function
[url=]隐藏详细[/url]
TypeError: me.comp is not a function at http://localhost:8080/x5/UI2/v_4430f6a8110b44b797a99b34d0598d25l_zh_CNs_desktopd_pc/teamtalkxwdev/devMain.js:219:8 at c.P.QB.P.U.extend.qT (eval at <anonymous> (eval at <anonymous> (http://webapi.amap.com/maps?v=1. ... Map.Geocoder:18:195)), <anonymous>:1:3979) at c.eval (eval at <anonymous> (eval at <anonymous> (http://webapi.amap.com/maps?v=1. ... Map.Geocoder:18:195)), <anonymous>:1:1088) at c.P.ca.l (eval at <anonymous> (http://webapi.amap.com/maps?v=1. ... Map.Geocoder:18:195), <anonymous>:31:352) at window.(anonymous function) (eval at <anonymous> (eval at <anonymous> (http://webapi.amap.com/maps?v=1. ... Map.Geocoder:18:195)), <anonymous>:1:1453) at http://restapi.amap.com/v3/geoco ... location=113.990988,22.681615&radius=1000&extensions=all&callback=jsonp_304432_&platform=JS&logversion=2.0&sdkversion=1.3&appname=http%3A%2F%2Flocalhost%3A8080%2Fx5%2FUI2%2Fv_%2Fteamtalkxwdev%2FdevMain.w%3F%24ownerid%3DC76EB03BE050000144A566F41D7019B7%23!&csid=E5866540-4102-4E7C-9EC9-842208BF4CA0:1:1


回复 支持 反对

使用道具 举报

发表于 2017-2-28 16:53:35 | 显示全部楼层
zgpeter 发表于 2017-2-28 15:27
请帮忙看看那里出了问题:

define(function(require) {

不对!赋值的地方,this又不表示model对象!
你可以在最外层定义var me
然后再modelLoad 事件中赋值
me = this;

还有自定义js方法建议使用我们案例提供的格式!
Model.prototype.addressval =  function(lnglatXY) {}

调用方法是
this.addressval(lnglat); // 地址解析    引用函数

qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

10

主题

18

帖子

72

积分

初级会员

Rank: 2

积分
72
QQ
 楼主| 发表于 2017-2-28 17:11:00 | 显示全部楼层
已经解决,需要全部写到 modelload里面就可以
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-2 01:38 , Processed in 0.077706 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

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