`

控件之间相互调用

阅读更多

控件之间相互调用 

 

 比如,有一个grid,上面有一个添加按钮。应该弹出一个window,在window进行保存工作。
点击保存之后,grid要更新。

他们之间的相互调用,难道都是使用getCmp()作为获取控件的途径吗?

 

请看是否达到你的要求,且结构清晰

 

var win;
var addrolewin;
var copywin;
var grid;
var expander;
var ds;

//编辑角色
function actionEditEvent() {
   var record = grid.getSelectionModel().getSelected();
   if (record) {
      win = new Ext.Window({
         id:id,
         title:"编辑用户组",
         iconCls:'edit',
         layout:'fit',
         width:650,
         height:450,
         closeAction:'close',
         collapsible:true,
         maximizable:true,
         plain: true,
         modal:true,
         html : '<iframe frameborder="0" width="100%" height="100%" src="index.php?mo=groupman&do=editrole&id='+record.data['roles_id']+'"></iframe>'
      });
      win.on("beforedestroy",function(){
         ds.reload();
      });
      win.show();
   }
}

//添加角色
function newRole () {
   addrolewin = new Ext.Window({
      id:id,
      title:"添加用户组",
      iconCls:'add_role',
      layout:'fit',
      width:650,
      height:450,
      closeAction:'close',
      collapsible:true,
      maximizable:true,
      plain: true,
      modal:true,
      html : '<iframe frameborder="0" width="100%" height="100%" src="index.php?mo=groupman&do=getroles"></iframe>'
   });
   addrolewin.on("beforedestroy",function(){
      ds.reload();
   });
   addrolewin.show();
}

//复制角色
function copyRole () {
   var id = getId(grid);
   if (!id) {
       Ext.Msg.alert('错误', '请选择一个用户组复制!');
   } else {
      copywin = new Ext.Window({
         id:id,
         title:"添加用户组",
         iconCls:'add_role',
         layout:'fit',
         width:650,
         height:450,
         closeAction:'close',
         collapsible:true,
         maximizable:true,
         plain: true,
         modal:true,
         html : '<iframe frameborder="0" width="100%" height="100%" src="index.php?mo=groupman&do=copyrole&id='+id+'"></iframe>'
      });
      copywin.on("beforedestroy",function(){
         ds.reload();
      });
      copywin.show();
   }
}

//生成表格
function makeGrid(){
   return new Ext.grid.GridPanel({
         border:false,
         viewConfig: {
            forceFit:true
         },
         buttonAlign :'left',
         region:'center',
         plugins: expander,
         loadMask: true,
         store: ds,
         cm: new Ext.grid.ColumnModel([
             expander,
             new Ext.grid.RowNumberer(),
             //new Ext.grid.CheckboxSelectionModel(),
             {header:"ID",width:50,sortable:true,dataIndex:'roles_id'},
             {header:"名称", width:100,sortable:false,dataIndex:'roles_<?php echo $user_languag;?>_name'},
             {header:"类型", width:100,sortable:false,renderer:check,dataIndex:'roles_type'}
            ]),
         //sm:new Ext.grid.CheckboxSelectionModel(),
         //autoExpandColumn:4,
         autoScroll: true,
         tbar: [
            {text:"添加",iconCls:'add_role',handler:newRole},{xtype:'tbseparator'},
            //{text:"删除",iconCls:'del',handler:del},{xtype:'tbseparator'},
             {text:"复制权限",iconCls:'copy',handler:copyRole},{xtype:'tbseparator'},
                {text:"刷新",iconCls:'refresh',handler:function (){ds.reload();}},
            '<font color="red">提示:双击一行可进行编辑!</font>'
         ],
         bbar: new Ext.PagingToolbar({
            pageSize: 50,
            store: ds,
            displayInfo: true,
            displayMsg: '第{0} 到 {1} 条数据 共{2}条',
            emptyMsg: '没有数据'
         })
      });
}

/*//删除
function del() {
   var ids = getIds(grid);
   if (ids) {
      var dialog  = Ext.Msg.show({
         title:"删除用户组", msg: "确认要删除该用户组吗?",
         icon:Ext.MessageBox.QUESTION, width:300,
         fn:function(btn) {
            if (btn =='ok') {
               Ext.MessageBox.show({
                  title: "请稍等",
                  msg: "正在删除",
                  progressText: 'loading...',
                  width:300,
                  wait:true,
                  waitConfig: {interval:500}
               });
               setTimeout(function(){}, 10000);
               //删除开始
               Ext.Ajax.request({
                     url: 'index.php?mo=groupman&do=del&ids='+ids,
                     success: function(result){
                              Ext.Msg.alert("成功","删除成功!");
                              ds.reload();
                     }
                });
               //删除结束
            }
         },
         buttons:{
            ok:"确认",cancel:"取消"
         }
      });
   } else {
      Ext.Msg.alert("错误","服务器出现错误,请稍候再试!");
   }
}*/

//自定义列
function check(value)
{
   if (value==2)
   {
      return '<font color="red">管理员</font>';
   }
   else
   {
      return '普通';
   }
}

Ext.onReady(function(){
    ds = new Ext.data.Store({
      proxy : new Ext.data.HttpProxy({url:'index.php?mo=groupman&do=list&'+Math.random()}),
        reader: new Ext.data.JsonReader({
         root: 'topics',
            totalProperty: 'totalCount',
            id: 'roles_id'
         },[
         'roles_id','roles_<?php echo $user_languag;?>_name','roles_type','games','users'
         ])
    });



   /*********************************************
           Ext.grid.RowExpander插件
   *********************************************/
   Ext.grid.RowExpander = function(config){
      Ext.apply(this, config);

      this.addEvents({
         beforeexpand : true,
         expand: true,
         beforecollapse: true,
         collapse: true
      });

      Ext.grid.RowExpander.superclass.constructor.call(this);

      if(this.tpl){
         if(typeof this.tpl == 'string'){
            this.tpl = new Ext.Template(this.tpl);
         }
         this.tpl.compile();
      }

      this.state = {};
      this.bodyContent = {};
   };

   Ext.extend(Ext.grid.RowExpander, Ext.util.Observable, {
      header: "",
      width: 20,
      sortable: false,
      fixed:true,
      menuDisabled:true,
      dataIndex: '',
      id: 'expander',
      lazyRender : true,
      enableCaching: true,

      getRowClass : function(record, rowIndex, p, ds){
         p.cols = p.cols-1;
         var content = this.bodyContent[record.id];
         if(!content && !this.lazyRender){
            content = this.getBodyContent(record, rowIndex);
         }
         if(content){
            p.body = content;
         }
         return this.state[record.id] ? 'x-grid3-row-expanded' : 'x-grid3-row-collapsed';
      },

      init : function(grid){
         this.grid = grid;

         var view = grid.getView();
         view.getRowClass = this.getRowClass.createDelegate(this);

         view.enableRowBody = true;

         grid.on('render', function(){
            view.mainBody.on('mousedown', this.onMouseDown, this);
         }, this);
      },

      getBodyContent : function(record, index){
         if(!this.enableCaching){
            return this.tpl.apply(record.data);
         }
         var content = this.bodyContent[record.id];
         if(!content){
            content = this.tpl.apply(record.data);
            this.bodyContent[record.id] = content;
         }
         return content;
      },

      onMouseDown : function(e, t){
         if(t.className == 'x-grid3-row-expander'){
            e.stopEvent();
            var row = e.getTarget('.x-grid3-row');
            this.toggleRow(row);
         }
      },

      renderer : function(v, p, record){
         p.cellAttr = 'rowspan="2"';
         return '<div class="x-grid3-row-expander">&#160;</div>';
      },

      beforeExpand : function(record, body, rowIndex){
         if(this.fireEvent('beforeexpand', this, record, body, rowIndex) !== false){
            if(this.tpl && this.lazyRender){
               body.innerHTML = this.getBodyContent(record, rowIndex);
            }
            return true;
         }else{
            return false;
         }
      },

      toggleRow : function(row){
         if(typeof row == 'number'){
            row = this.grid.view.getRow(row);
         }
         this[Ext.fly(row).hasClass('x-grid3-row-collapsed') ? 'expandRow' : 'collapseRow'](row);
      },

      expandRow : function(row){
         if(typeof row == 'number'){
            row = this.grid.view.getRow(row);
         }
         var record = this.grid.store.getAt(row.rowIndex);
         var body = Ext.DomQuery.selectNode('tr:nth(2) div.x-grid3-row-body', row);
         if(this.beforeExpand(record, body, row.rowIndex)){
            this.state[record.id] = true;
            Ext.fly(row).replaceClass('x-grid3-row-collapsed', 'x-grid3-row-expanded');
            this.fireEvent('expand', this, record, body, row.rowIndex);
         }
      },

      collapseRow : function(row){
         if(typeof row == 'number'){
            row = this.grid.view.getRow(row);
         }
         var record = this.grid.store.getAt(row.rowIndex);
         var body = Ext.fly(row).child('tr:nth(1) div.x-grid3-row-body', true);
         if(this.fireEvent('beforcollapse', this, record, body, row.rowIndex) !== false){
            this.state[record.id] = false;
            Ext.fly(row).replaceClass('x-grid3-row-expanded', 'x-grid3-row-collapsed');
            this.fireEvent('collapse', this, record, body, row.rowIndex);
         }
      }
   });
/////////////////////
    expander = new Ext.grid.RowExpander({
        tpl : new Ext.Template(
            '<br>&nbsp;&nbsp;<b>游戏权限:</b> {games}<br><br>',
            '&nbsp;<b>下属人员:</b> {users}<br><br>'
        )
    });

    grid = makeGrid();
    grid.addListener("rowdblclick", actionEditEvent);
   var viewport = new Ext.Viewport({
        layout:'border',
        items:[grid]
      });

   ds.load({params:{start:0, limit:50}});
});

分享到:
评论

相关推荐

    MFC与duilib之间控件相互调用.rar

    MFC与duilib之间控件相互调用MFC与duilib之间控件相互调用MFC与duilib之间控件相互调用MFC与duilib之间控件相互调用

    C# 窗体之间的控件调用

    窗体之间的空间调用事件 子窗体和主窗体空间相互调用

    mfc与duilib之间控件相互调用

    mfc与duilib之间控件相互调用

    C#通过geckofx-v45.0.控件完美实现C#与JS之间互相调用,工程亲测100%可用良心工程决不骗积分。

    C#通过geckofx-v45.0.控件完美实现C#与JS之间互相调用,工程亲测100%可用良心工程决不骗积分。

    C#中父窗口和子窗口之间实现控件互操作

    C#中父窗口和子窗口之间实现控件互操作C#中父窗口和子窗口之间实现控件互操作

    C#控件使用编程

    该资源为:C#控件使用与编程资料,如窗体间相互调用及数据传递方法、几种C#窗体间通讯的处理方法 等。

    VB6.0动态加载ActiveX控件漫谈

    ---- ActiveX 部件通过客户端/服务器关系与应用程序— 及与部件相互之间— 交 互作用。客户端是使用部件功能的应用程序代码或部件。服务器是部件及其关联的对象。 例如,假设应用程序使用 ActiveX 控件来提供一个...

    JS调用Android、Ios原生控件

    在上一篇博客(详解JS与APP原生控件交互)中已经和大家聊了,关于JS与Android、Ios原生控件之间相互通信的详细代码实现,今天我们一起聊一下JS调用Android、Ios通信的相同点和不同点,以便帮助我们在进行混合式开发...

    经验总结用guide生成的不同GUI之间控件的互相操作-demo.rar

     前面有会员提出问题:如何在不同的GUI之间相互操作其中的控件?  如果程序是由matlab的GUIDE生成的,处理起来比较简单。下面就说说我的一点经验:  每个GUI程序都生成一个handles结构,该handles结构和该GUI...

    IOS Swift UI控件实现大全

    swfit的一个demo工程,实现了swift中所有的控件哦,而且里面有swift和oc之间的调用

    CefSharp 49.0.0.1 C#中的Google浏览器控件

    Aspfm.Google,使用CefSharp49.0.0.1插件,开发WINform中的google浏览器控件。详细讲解了JS与后台C#代码之间的相互调用。及复杂参数传递的问题。

    MF00142-原型设计器.zip

    响应:设计器提供了事件响应机制,控件之间通过事件和方法的绑定,实现相互调用。 扩展:控件采用注册方式,注册到程序中的控件即可在用户界面中使用。本版本提供 的所有控件都是独立的dll文件;用户可以继承标准...

    VB.net 通过GPRS 拨号上网源程序

    通过控制西门子 mc45 mc55 高频模块实现GPRS无线拨号上网,虽然此种程序在网上很多,但都是C语言的版本,且都是互相之间差别 不大。本人2009年用vb.net 2008 实现这一系列通讯程序,包括最起始的拨号命令控制,然后...

    MVVM练习.zip

    关于WPF MVVM中的VM之间传值还有用户控件的使用,非常的适合新手了解MVVM模式的写法和这个框架,中间用户控件怎么调用到主界面上还有两个用户控件和主界面怎么互相传递信息和数据

    VC 各种进制 数制相互转换程序.rar

    VC 各种进制 数制相互转换程序,程序支持在二进制、八进制、十六进制、十进制之间转换。源码中ConvertNum目录内的是进制转换控件的源代码,编译后,要将生成的DLL控件拷贝至ConvertDemo目录的Debug目录下运行,也...

    基于android的移动新闻app应用开发(带报告)

    也能提升自己编程思维的提升,特别是面向对象的编程思维,能够解决日常学习中没有从程序整体面对各个控件、布局、数据库之间进行互相调用的疑难问题。 本次移动新闻系统主要实现以下几个功能:一是普通用户模块,...

    通用的数学表达式编译计算动态库 V5.1

    该动态库支持实数、复数和整数三种类型的数学表达式,这三种表达式可以单独使用,也可同时使用,在同时使用时,允许三种表达式之间的相互调用。 该动态库中的基本函数总数达100多个,除了包括常用数学函数外,还...

    C#编程经验技巧宝典

    100 &lt;br&gt;0158 如何将二进制数转换为十六进制数 100 &lt;br&gt;0159 如何实现0~9之间随机整数 101 &lt;br&gt;0160 如何实现0~1之间随机数 101 &lt;br&gt;0161 如何返回数字的绝对值 101 &lt;br&gt;5.2 控件数据处理...

    RINGSDK包含界面库和图象库。

    9、窗口类之间的互相访问: 因为窗口类声明时就产生了一个类对象指针,因此可以用这个指针来访问其他窗口,比如弹出了一个对话框,在这个对话框内部: 可以调用window-&gt;somefunction来调用或访问主窗口的函数或数据...

Global site tag (gtag.js) - Google Analytics