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

QQ登录

只需一步,快速开始

查看: 3339|回复: 6

[结贴] 外部定义的js方法使用x5的方法

[复制链接]

77

主题

314

帖子

614

积分

高级会员

Rank: 4

积分
614
QQ
发表于 2016-8-22 12:03:00 | 显示全部楼层 |阅读模式
我的代码是这样的:
define(function(require) {
        var $ = require("jquery");
        var justep = require("$UI/system/lib/justep");
        var biz = require("$UI/system/lib/biz");
        var Model = function() {
                this.callParent();
        };

        Model.prototype.saveCommit = function(event) {
                justep.Util.hint("保存成功!", {type: 'success', parent: this.getRootNode()});
        };
       
                Model.prototype.grid3RowClick = function(event){
                var data = this.comp("mainData");
                var id = event.row.getID();
                data.to(id);
                var tabs = this.comp('tabs');
                tabs.setActiveTab('nav-detail');
        };
       
        Model.prototype.button2Click = function(event) {
                var data = this.comp("mainData");
                var row = this.comp('listData').getCheckeds();
                if(row.length===0){
                    data.deleteData();
            }else{
           
                    data.deleteData(row);
            }
            data.refreshData();
        };

       
        return Model;
});

function test(){
   this.comp('button1').//这句就报错了,说未定义???????

}
我在外部定义的js方法,怎么使用内部model的方法啊?而且我想要调用saveCommit 方法,又要怎么写?

64

主题

471

帖子

1127

积分

金牌会员

Rank: 6Rank: 6

积分
1127
发表于 2016-8-22 12:48:57 | 显示全部楼层
你需要把model注册到全局后访问它,好多关于这方面的讨论,例如:http://bbs.wex5.com/forum.php?mod=viewthread&tid=98331
this本身是指当前对象,例如你test函数里的this,是指test函数本身,不是model,运行肯定得报错了,这是你javascript的功底太差的表现。
回复 支持 反对

使用道具 举报

77

主题

314

帖子

614

积分

高级会员

Rank: 4

积分
614
QQ
 楼主| 发表于 2016-8-22 14:23:21 | 显示全部楼层
qldsrx 发表于 2016-8-22 12:48
你需要把model注册到全局后访问它,好多关于这方面的讨论,例如:http://bbs.wex5.com/forum.php?mod=viewt ...

谢谢,非常感谢,还有在web x5要怎么检索才能搜到这方面的帖子呢?我感觉我都查不到
回复 支持 反对

使用道具 举报

0

主题

1639

帖子

497

积分

中级会员

Rank: 3Rank: 3

积分
497
QQ
发表于 2016-8-22 18:16:54 | 显示全部楼层
5新世界 发表于 2016-8-22 14:23
谢谢,非常感谢,还有在web x5要怎么检索才能搜到这方面的帖子呢?我感觉我都查不到 ...

哪里报未定义,你首先就搜那句话呗
回复我的时候请点击我当前评论旁边的回复按钮,能保证第一时间看到您的回复,在问题解决后,希望大家可以吧解决方法也分享一下,这样可以让更多的X5开发者共同进步,谢谢大家的知识共享
回复 支持 反对

使用道具 举报

77

主题

314

帖子

614

积分

高级会员

Rank: 4

积分
614
QQ
 楼主| 发表于 2016-8-30 16:22:33 | 显示全部楼层
qldsrx 发表于 2016-8-22 12:48
你需要把model注册到全局后访问它,好多关于这方面的讨论,例如:http://bbs.wex5.com/forum.php?mod=viewt ...

能给个详细的代码吗?怎么把model注册到全局?我希望把model定义在define(function(require) {}外面,就像平常的js写个function 方法调用  w文件本身的各种方法,像调用savaData(),refreshData()之类的,求指教
回复 支持 反对

使用道具 举报

77

主题

314

帖子

614

积分

高级会员

Rank: 4

积分
614
QQ
 楼主| 发表于 2016-8-30 16:29:13 | 显示全部楼层
qldsrx 发表于 2016-8-22 12:48
你需要把model注册到全局后访问它,好多关于这方面的讨论,例如:http://bbs.wex5.com/forum.php?mod=viewt ...

我试了下搞不定,你就直接告诉我,在一楼的代码,要怎么写才能在test()方法里调用this.comp()方法?
回复 支持 反对

使用道具 举报

64

主题

471

帖子

1127

积分

金牌会员

Rank: 6Rank: 6

积分
1127
发表于 2016-8-30 16:45:07 | 显示全部楼层
本帖最后由 qldsrx 于 2016-8-30 16:46 编辑

index.js中:
  1. var Model = function() {
  2.         this.callParent();
  3.         //用户其它代码
  4.         window.models = new Object();
复制代码

main.js中:
  1. var Model = function() {
  2.         this.callParent();
  3.         //用户其它代码
  4.         window.models["main"] = this; //”main“和页面名相同,方便以后检索。

  5. Model.prototype.modelUnLoad = function(event){
  6.         window.models["main"] = undefined; //页面关闭的同时需要全局释放,这是好习惯,避免浏览器内存越用越多
  7. };
复制代码

这里modelUnLoad事件需要在页面里双击Model的UnLoad事件产生。
使用时,如你的代码中的test函数,只要这样写:

  1. function test(){
  2.     var m = models["main"];
  3.     m.comp('button1').xx
  4. }
复制代码

别告诉你你看不懂index.js和main.js的意思,那只是举例,不代表一定是那个名字,如果这都不理解,那我直接说,你不适合这个行业。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-24 09:16 , Processed in 0.078661 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

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