请选择 进入手机版 | 继续访问电脑版

开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 安装 BPM 控件
查看: 3389|回复: 0

内嵌窗体控件 IFramePanel 开发手册

[复制链接]

40

主题

49

帖子

260

积分

超级版主

Rank: 8Rank: 8

积分
260
发表于 2016-5-17 17:34:22 | 显示全部楼层 |阅读模式
本帖最后由 tanglixu 于 2016-5-18 11:18 编辑

目录



第一章 概要

第二章 简单示例

第三章 复杂示例

第一章 概要



一、功能特性

1、可以重用系统已经定义好的界面,避免重新开发或复制

2、可以嵌套多层IFramePanel,开发较复杂的功能

二、主要属性

  • ModuleID内嵌框架引用的界面模型编码
  • ModuleArgs内嵌框架引用的界面模型参数

    lip_image001.png

  • Window 引用的界面模型包含的window对象,通过该对象可以访问关联页面的所有对象

      lip_image002.png

三、主要方法

  • void Refresh(callback) 刷新并显示该子页面

      lip_image003.png

  • void ReadyCall(callback) 先确保子界面加载完成,再调用该子页面对应的方法

      lip_image004.png

四、主要事件

  • void OnLoadInit (sender, eventArgs) 界面初始化时,在该事件中根据需要重写框架子页面对应的方法,类似事件机制

      lip_image005.png

  • void OnLoadCompleted(sender, eventArgs) 界面加载完成后执行,等同于 Refresh(callback) 回调方法


第二章 简单示例




一、效果图

ip_image007.jpeg

ip_image009.jpeg

二、开发过程

1、开发机构树界面窗体

ip_image011.jpeg

  • 声明对外方法事件,为其他窗体调用作为覆盖点

lip_image012.png

  • 引入编写覆盖点

lip_image013.png

2、开发综合界面(参考效果图)

  • 如图拖入2个控件
  • 编写初始化代码

lip_image014.png

3、在初始化事件中覆盖Iframe页面的方法事件

ip_image016.jpeg

第三章 复杂示例



一、效果图

ip_image018.jpeg

图1

二、开发过程

lip_image019.png

这个功能总共包含了5个界面

包含关系如下

ip_image021.jpeg

1、新建一个界面【IFramePanel测试】,在该界面上添加两个IframePanel,分别为iFramePanel1和iFramePanel2其中IFramePanel引用公用树界面,iFramePanel2引用主子集界面

ip_image023.jpeg

//在初始化前脚本增加如下代码

iFramePanel1.OnLoadInit = function(sender, eventArgs) {

//重写树界面的Page. doAfterNodeSelect方法

eventArgs.window.Page.doAfterNodeSelect = function(node) {

        iFramePanel2.ReadyCall(function(innerWin){

            innerWin.iFramePanel1.ReadyCall(function(win){

                var id = node.ID + "%";

                win.dataGrid1.TableWhere = "B0001 like " + Common.String.toQuoteSingle(id);

                win.dataGrid1.Refresh();

            })

        })

    }

}

2、公用树界面【IFramePanel_Tree】

ip_image025.jpeg

公用树界面上只添加一个OrgTreeView【orgTreeView1】

//定义节点选中后方法,在父页面中进行重写

Page.doAfterNodeSelect = function(node){

}

//定义节点选中后事件

function orgTreeView1_OnAfterSelect(sender, node){

    Page.doAfterNodeSelect(node);

}

3、主子集界面【IFramePanel_MainAndChildren】

ip_image027.jpeg

主子集页面包含两个IFramePanel控件,

iFramePanel1引用主集界面【IFramePanel_Main】

iFramePanel2引用子集界面【IFramePanel_Children】

//在初始化前脚本增加如下代码

iFramePanelMain.OnLoadInit = function(sender, eventArgs){

    //行选中

var innerPage = eventArgs.window.Page;

//重写IFramePanel_Main中定义的同名方法。

    innerPage.doAfterRowSelect = function(args){ //

        iFramePanel2.ReadyCall(function(win){

            win.dataGrid1.TableName = "A04";

            win.dataGrid1.TableWhere="PersonID="+ Common.String.toQuoteSingle(args.PersonID);

            win.dataGrid1.Refresh();

        });

    }

    innerPage.doAfterGridRefresh = function(args){

        if(args.recordcount == 0){

            iFramePanel2.ReadyCall(function(win){

                win.dataGrid1.TableName = "A04";

                win.dataGrid1.TableWhere = "1<>1";

                win.dataGrid1.Refresh();

            });

        }

    }

}

IFramePanel_Main界面中定义

//定义节点选中后方法,在父页面中进行重写

Page.doAfterRowSelect = function(args){

}

//定义节点刷新后方法,在父页面中进行重写

Page.doAfterGridRefresh = function(args){

}


dataGrid1.OnRowSelectChanged = function (sender, rowIndex){

    var rowData = dataGrid1.GetRowData(rowIndex);

    Page.doAfterRowSelect(rowData);

}

dataGrid1.OnAfterRefresh= function (sender, eventArgs){

    Page.doAfterGridRefresh(eventArgs);

}


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

本版积分规则

QQ|手机版|一步通软件 ( 蜀ICP备15031919号 )

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