父子窗口传递参数方法分享

小光芒 3月前 511

下面给大家分享三种父子窗口传递参数的方法;


第一种,使用publish/subscribe 进行消息发布和订阅;

父窗口:

var frmChild1 = mainForm.loadForm("\dlg\publish传值.aardio");
	publish("方法一",'hello aardio!!!');
	frmChild1.show();

子窗口:

subscribe("方法一",function(...){
	winform.edit.print(...); 
} )



第二种: 使用参数传值;

父窗口:

var frmChild2 = mainForm.loadForm("\dlg\参数传值.aardio","hello aardio!!!");
	
	frmChild2.show();

子窗口:

var t ={...}; //接收主窗口来的参数

winform.edit.print(t);



第三种: 注册变量到父窗口上,子窗口直接访问;

父窗口:

 mainForm.a = "hello aardio !!!"
	
	var frmChild3 = mainForm.loadForm("\dlg\注册到主窗口.aardio");
	frmChild3.show();

子窗口:

 //直接访问主窗口的值
winform.edit.text = winform.parent.a;


以上是我关于窗口之间传值一些个人看法,如有错误请各位老师斧正!!!!


测试工程已打包。

上传的附件:
最新回复 (3)
  • 小肥羊 3月前
    0 2

    如果在loadform时传值,其实不用这么复杂,有几个特性知道就行,我的理解,有不对的大家指出来

    //默认创建工程时
    //mainForm 不是用var创建了,此时在程序集中创建变量如果不使用var 定义,将会是全局变量,线程内有效
    
    //mainForm中的变量,不要用var定义,不然就局部变量了。
    stringSSS = "test var"
    
    //在mainform中  通过  win.loadform  或者 mainForm.loadForm后的子窗口中
    
    //可以直接访问到变量  stringSSS 
     console.log(stringSSS )
     
     
    //当然这个其实会导致看上去混乱,还有一种方法,直接给mainForm定义属性,在子窗口中访问也可以的。
    
    mainForm.stringSSS  = "test string"   
    
    //子窗口直接访问 mainForm.stringSSS 即可


    不过我自己的工程其实也不这么用,一般是设计一个配置库文件,提供了一个公用的命名空间,然后把公用的参数或者配置全部写在这里,所有程序都引入它,通过这个来交互的,这样看起来好看。


    //比如有一个用户登录的功能,在不考虑多线程的情况下,我的做法是
    //1、定义一个userinfo的库,提供了一个用户的基本信息结构,值当然都是空值
    
    //2、在loginForm中 ,处理用户登录信息,如果返回结果正常,修改userinfo对应信息,其实登录过程函数都可以放在userinfo库中
    
    userinfo.data = ... //给用户信息赋值,并且给userinfo的其他各种字段赋值,处理好用户的权限或者授权信息,
    
    //3、其他窗口使用userinfo数据
    //直接调用  userinfo[['']]属性即可
    
    //4、比如权限检查,在userinfo中定义一些函数,check(xxx)...
    
    /*
    这么做我认为有几个好处
    
    1、就是在单页面调试时,不会因为参数缺失导致不能单页面运行,
    
    通过赋值或者其他传值方式会导致只能从mainForm开始调试工程
    
    2、有些单页面调试需要有值,此时在userinfo这个库中,
    
    可以为调试模式配置好一套完整的数据信息,直接单页面运行也不会有问题
    
    
    */
    if(_STUDIO_INVOKED) userinfo.xxx = {}


    反正我目前做的项目都是这么搞的,至于有没有更好的思路,大家探讨一下。

  • cyzn_lfss 3月前
    0 3

    这两天正在学着用多标签的窗口,受教了

  • bequt 29天前
    1 4
    小肥羊 如果在loadform时传值,其实不用这么复杂,有几个特性知道就行,我的理解,有不对的大家指出来//默认创建工程时 //mainForm 不是用var创建了,此时在程序集中创建变量 ...
    感觉大佬您没讲明白,你只是讲了namespace,但是样例没。 这个内容确实值得开贴说明
返回