您的位置:新葡亰496net > 奥门新萄京娱乐场 > 新葡亰496net:异步获取和刷新ExtJS6,哪位达人能

新葡亰496net:异步获取和刷新ExtJS6,哪位达人能

发布时间:2019-11-23 15:40编辑:奥门新萄京娱乐场浏览(140)

    从数据库获取构造树结构是ExtJS TreePanel的宗旨技能,常用方法是TreeStroe里陈设proxy,这种方法的root成了二个不受调整的节点。

    Ext prototype定义的法子调用出错,附代码,哪位达人能支持解决一下
    代码如下:
    Ext.ux.TreePanel = function{
    Ext.QuickTips.init();
    this.config = config;
    this.title = this.config.title || '';
    this.bean = this.config.bean;
    this.id = this.config.id;
    this.el = this.config.el;
    this.region = this.config.region;
    this.deleteUrl = this.config.deleteUrl;//删除action
    this.loadUrl = this.config.loadUrl;//表格加载action
    this.saveUrl = this.config.saveUrl;//表单保存action
    this.editUrl = this.config.editUrl;//表单编辑action
    this.formFields = this.config.formFields || new Array();//表单展现字段
    this.key = this.config.key || 'id';//数据主键
    this.treeMenu = new Ext.menu.Menu({
    id: 'contextMenu',
    items: [{id: 'addNode',text: '新增加节点'},
    {id: 'removeNode',text: '移除节点'},'-',
    {id: 'refresh',text: '刷新'}]
    });
    this.root = new Ext.tree.AsyncTreeNode({text: ' ',draggable: false,id: ' ',children: [{id: ' ', text: 'loading' ,iconCls: 'x-tree-node-loading' ,leaf: true}]});
    this.root.on('expand' ,this.getNodes.createDelegate;
    this.tree = new Ext.tree.TreePanel({
    region: this.region,
    新葡亰496net:异步获取和刷新ExtJS6,哪位达人能支援解决一下。lines: true,
    split: true,
    //el: this.el,
    renderTo: this.el,
    frame: true,
    collapseMode: 'mini',
    collapsible: true,
    width: 160,
    height: 500,
    treeRightMenu: this.treeMenu,
    autoScroll: true,
    rootVisible: false,
    animate: true,
    enableDD: false,
    border: true,
    root: this.root
    });
    this.tree.on('contextmenu' ,this.showMenu.createDelegate;
    this.tree.on('click' ,this.nodeClick.createDelegate;
    }

    那二日在化解extjs 的权能难题。须求调整的靶子是  菜单,开关,U凯雷德L

    TreeStroe的root实际是三个层叠json数据,半数以上情况是直接写一些精练多少,但在事实上行使中一定会将是要从数据库读取的。小编的点子是先用Ext.Ajax.request获取root数据产生TreeStroe。定义三个大局的TreeStroe名字是mTreeStore,用Ext.Ajax.request得到root数据。TreeStoreRefresh函数与此近似,将mTreeStore的root换为新值。TreePanel的rootVisible属性必得为true,增添一个节点单击事件显得节点的音讯。

    Ext.ux.TreePanel.prototype = {
    onAdd : function(){
    alert;
    },
    onDelete : function(){
    alert;
    },
    onReload : function(){
    alert;
    },
    onClose : function(){
    alert;
    },
    showMenu : function(){
    alert;
    },
    nodeClick : function {
    alert;
    },
    getNodes : function{
    var cnode = node.firstChild;
    var m_url = this.loadUrl;
    var m_key = this.key;
    if (!cnode || (cnode && cnode.text == 'loading')){
    Ext.Ajax.request({
    url: m_url,
    params: m_key "=" node.id,
    method: 'post',
    success: function{
    var arrs = Ext.util.JSON.decode(response.responseText);
    var cnode1 = null;
    var arr = null;
    for (var i = 0 ;i< arrs.length ;i ){
    arr = arrs[i];
    cnode1 = new Ext.tree.AsyncTreeNode({id: arr.id,text: arr.text,leaf: arr.leaf,children: [{id: ' ' ,text: 'loading', iconCls: 'loading', leaf: true}]})
    cnode1.on('expand' ,Ext.ux.TreePanel.prototype.getNodes;
    node.appendChild;
    }
    if (cnode && cnode.text == 'loading') {
    node.removeChild;
    }
    }
    });
    }
    }
    }
    如上,乳白部分这些节点的expand方法调用的依旧其一形式,但不亮堂这里该怎么写。

    解题思路1 : 重载Connection类

    var mTreeStore = null;
    Ext.Ajax.request({
        async: false,
        url: '/api/BasicData_API/GetBasicTablesTreeSource',
        method: 'get',
        success: function (response, options)
        {
          var TreeRoot = Ext.decode(response.responseText);
          mTreeStore = Ext.create('Ext.data.TreeStore',
          {
            root: TreeRoot
          });
        },
        failure: function (response, options)
        {
          //var responseArray = Ext.decode(response.responseText);
          Ext.Msg.alert('服务器错误', '数据处理错误原因:nr'   response.responseText);
        }
    });
    
    function TreeStoreRefresh()
    {
      Ext.Ajax.request({
        async: false,
        url: '/api/BasicData_API/GetBasicTablesTreeSource',
        method: 'get',
        success: function (response, options)
        {
          var TreeRoot = Ext.decode(response.responseText);
          if (mTreeStore != null)
          {
            mTreeStore.setRoot(TreeRoot);
          }
        },
        failure: function (response, options)
        {
          //var responseArray = Ext.decode(response.responseText);
          Ext.Msg.alert('服务器错误', '数据处理错误原因:nr'   response.responseText);
        }
      });
    }
    
    Ext.define('TreeToolbarCls', {
      extend: 'Ext.toolbar.Toolbar',
      padding:'0 0 0 0',
      items: [{
        text: '刷新',
        iconCls: 'refresh',
        handler: TreeStoreRefresh,
        height: 30,
        width: 65
      }]
    });
    
    Ext.define('U1TreeCls',
    {
      extend: 'Ext.tree.Panel',
      xtype: 'U1Tree_xtype',
      //title: '基础数据字典',
      rootVisible: true,
      width: 300,
      store: mTreeStore,
      scrollable: true,
      tbar:Ext.create('TreeToolbarCls'),
      listeners:
      {
        itemclick: NodeClick
      }
    });
    
    function NodeClick(node, record, item, index, e, eOpts)
    {
    
      if (typeof (record.data) == "undefined")
      {
        return;
      }
      var message = Ext.String.format('Level={0}<br/>state={1}', record.data.Level, record.data.state);
      Ext.Msg.alert("节点信息", message);
    }
    

    标题补充:
    getNodes :function{
    var cnode = node.firstChild;
    var m_url = this.loadUrl;
    var m_key = this.key;
    if (!cnode || (cnode && cnode.text == 'loading')){
    Ext.Ajax.request({
    url: m_url,
    params: m_key "=" node.id,
    method: 'post',
    success: function{
    var arrs = Ext.util.JSON.decode(response.responseText);
    var cnode1 = null;
    var arr = null;
    for (var i = 0 ;i< arrs.length ;i ){
    arr = arrs[i];
    cnode1 = new Ext.tree.AsyncTreeNode({id: arr.id,text: arr.text,leaf: arr.leaf,children: [{id: ' ' ,text: 'loading', iconCls: 'loading', leaf: true}]})
    cnode1.on('expand' ,Ext.ux.TreePanel.prototype.getNodes;
    node.appendChild;
    }
    if (cnode && cnode.text == 'loading') {
    node.removeChild;
    }
    }

     由于extjs和server端人机联作全部是json格式的多少人机联作,server端不会垄断页面包车型客车跳转,页面跳转,提醒效用全都有extjs来成功。

    上边是后台C#代码

    看那些的七个粗体的有的,因为自身这一个getNodes方法是在prototype中定义的,而笔者第四个粗体部分的意味是从服务器读取后,把新节点加到当前节点下,然后这些新节点近似要在拓宽的时候施行那些情势去获取新的节点下来。便是在第二个粗体部分写什么都异形,刚开首写的是cnode1.on('expand',this.getNodes.createDelegate出错,用this.getNodes也出错,不了然这么描述清楚不知晓

       extjs和server端的相互格局全部是世袭自 Ext.data.Connection,那个类中能够阻止全部和server端人机联作的秘技。

    概念三个TreeNode类,饱含TreePanel节点固有的一些质量,也得以恣意扩展,利用那几个能够自定义超多附加数据,如作者在里头定义Level表示节点的等第。

       server端的权杖调节用acegi做的,借使没通过acegi的表明,未有授权会再次回到到403.jsp,供给重登入会再次来到到 login.jsp。

      [Authorize]
      [RoutePrefix("api/BasicData_API")]
      public class BasicData_APIController : ApiController
      {
        [Route("GetBasicTablesTreeSource")]
        public HttpResponseMessage GetBasicTablesTreeSource(string condition = null)
        {
          List<TreeNode> lstF = new List<TreeNode>();
          ZydAdonet z = ZydAdonet.Instance();
          string s1 = "select TableName,title from BaseDataTables order by TableName";
          string sqltext = s1;
          DataTable dt1;
          string ErrMes;
          z.Sql2DTReadOnly(s1, out dt1, null, out ErrMes);
          TreeNode tnd;
    

       由此重载Connection类,并改写个中的 handleResponse 方法,判别重返的结果是还是不是是 403.jsp,login.jsp, 假诺是就张开对应的调整,假使是常规的回到数据就连任向下进行。

          foreach (DataRow drx in dt1.Rows)
          {
            tnd = new TreeNode
            {
              id = drx["TableName"].ToString(),
              text = drx["title"].ToString(),
              Level = 1,
              iconCls = "table_6",
              state = drx["TableName"].ToString() " OK",
              leaf = true
            };
            lstF.Add(tnd);
          }
          TreeNode root = new TreeNode
          {
            text = "底蕴数据字典",
            expanded = false,
            iconCls = "folder_close",
            Level = 0,
            state = "RootOfTree",
            leaf = true
          };
          if (lstF.Count > 0)
          {
            root.expanded = true;
            root.leaf = false;
            root.iconCls = "folder_open";
            root.children = lstF;
          }

         小编个人在403.jsp  和login.jsp 的第生龙活虎行加上了 注释代码<!--权限调整自定义关键字-->,便是靠那一个主要字来办事的

          string JsonStr;
          JsonStr = JsonConvert.SerializeObject(root);
          HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK, "value");
          response.Content = new StringContent(JsonStr, Encoding.GetEncoding("UTF-8"), "application/json");
          response.Headers.CacheControl = new CacheControlHeaderValue()
          {
            MaxAge = TimeSpan.FromMinutes(10)
          };
          return response;
        }
      }
    
      internal class TreeNode
      {
        public string id { get; set; }
        public string text { get; set; }
        public string iconCls { get; set; }
        public string state { get; set; }
        public bool leaf { get; set; }
        public int Level { get; set; }
        public bool expanded { get; set; }
        public List<TreeNode> children { get; set; }
      }
    

       ,代码如下:

    在NodeClick函数中断能够监视到越来越多的音讯:

     //此处重载了Cunnection方法,用来拦截client与Server的交 互,
    //后台acegi拦截客商央浼后,要是无权力,重返403.jsp;如若没登入,再次来到login.jsp;
    //通过Acegi拦截 后,才回去客户想要的Json结果
    Ext.override(Ext.data.Connection, {  
                handleResponse : Ext.data.Connection.prototype.handleResponse.createInterceptor(  
             function(response) {  
                 var resText=response.responseText;
            if (resText.length>10) {
               resText=resText.substr(0,9);
            }  
            if (resText=='<!--login'){
                window.top.location.href = topURL "/login.jsp";
             } else if (resText=='<!--deny-'){
              if (resText=='<!--deny-'){
                  Ext.Msg.show({
           title : '错误提示',
           msg : '禁绝访谈此功用,请和系统管理员联系',
           buttons : Ext.Msg.OK,
           icon : Ext.Msg.INFO
            });
              };   
             } else if (resText=='<!--404--'){
                  Ext.Msg.show({
           title : '错误提醒',
           msg : '页面未找到',
           buttons : Ext.Msg.OK,
           icon : Ext.Msg.INFO
            });
             }
            })  
    });

    新葡亰496net 1

    解题思路2: server端再次回到菜单json数据

    末段的运作效果:

       小编的美食指南用tree来做的,在起头化主页面时先起头化菜单,

    新葡亰496net 2 新葡亰496net 3

             loader : new Ext.tree.TreeLoader({
              dataUrl : 'getJsonMenus.do'
           }),

           那个'getJsonMenus.do'再次回到菜单json数据,在strut第22中学的配置为:

    下一场改成数据表里的数额,点“刷新”就完成了TreePanel节点的刷新。

        <action name="getJsonMenus" class="jsonSystemAction" method="getJsonMenus">
       <result type="json">
        <param name="root">menus</param>
       </result>
      </action>

    menus是个list<JsonMenu>,

      JsonMenu的天性为:

     private String text;
     private boolean expanded;
     private String id;
     private boolean leaf;
     private List<JsonMenu> children;

     

           getJsonMenus.do 再次回到的格式是能够满意tree的格式必要的。

          js代码如下

    Ext.onReady(function() {
     setTimeout(function() {
      Ext.get('loading').remove();
      Ext.getDom('header').style.visibility = 'visible';
      var vp = new Ext.Viewport({
       layout : 'border',
       defaults : {
        collapsible : true,
        split : true
       },
       items : [{
        xtype : 'box',
        region : 'north',
        applyTo : 'header',
        height : 30,
        split : false
       }, {
        title : currentUser,
        id : 'accordion-panel',
        layout : 'border',
        region : 'west',
        margins : '2 0 5 5',
        width : 200,
        minSize : 200,
        maxSize : 250,
        bodyStyle : 'background-color:#DFE8F6',
        defaults : {
         border : false
        },
        bbar : [{
         text : '开始',
         iconCls : 'icon-plugin',
         menu : new Ext.menu.Menu({
          items : [{
           text : '关于系统',
           iconCls : 'icon-info',
           handler : function() {
            new Ext.Window({
             closeAction : 'close',
             resizable : false,
             bodyStyle : 'padding: 7',
             modal : true,
             title : '关于本系统',
             html : '本系统接收当下较为流行的技能完毕,<br>前台使用了ExtJs本领,所以达成了跨浏览器<br>'

    •            ' 本程序在IE6,IE7,FireFox3均测量检验通过!<br><br>首要技能: Struts2
    • Spring iBatis ExtJs<br><br>'
                  '数  据  库: Oracle 9i',
               width : 300,
               height : 200
              }).show();
             }
            }, {
             text : '退出系统',
             iconCls : 'icon-delete',
             handler : function() {
              Ext.Msg.confirm('操作提醒', '您鲜明要退出本系统?', function(btn) {
               if ('yes' == btn) {
                Ext.Ajax.request({
                 url : 'logout.do',
                 success : function() {
                  location = '/';
                 },
                 failure : function() {
                  Ext.Msg.show({
                   title : '错误提示',
                   msg : '退出系统退步!',
                   icon : Ext.Msg.ERROR,
                   buttons : Ext.Msg.OK
                  });
                 }
                });
               }
              });
             }
            }]
           })
          }],
          items : [{
           layout : 'accordion',
           region : 'center',
           items : [{
            title : '导航菜单',
            iconCls : 'icon-nav',
            border : false,
            items : [{
             xtype : 'treepanel',
             border : false,
             rootVisible : false,
             autoScroll : true,
             loader : new Ext.tree.TreeLoader({
                dataUrl : 'getJsonMenus.do'
             }),
             root : new Ext.tree.AsyncTreeNode(),
             listeners : {
              'click' : function(n) {
               try {
                var sn = this.selModel.selNode || {};
                if (n.leaf && n.id != sn.id) {
                 Ext.getCmp('content-panel').layout.setActiveItem(n.id.substring(0, n.id
                   .indexOf('-'))
                    '-panel');
                }
               } catch (e) {
               }
              }
             }
            }]
           },{
               title : '系统设置',
            iconCls : 'icon-nav'
           }]
          }]
         }, {
          id : 'content-panel',
          region : 'center',
          layout : 'card',
          margins : '2 5 5 0',
          activeItem : 0,
          border : false,
          items : [start, p_company, p_user, p_dept, p_system, p_subject, p_category, p_resource]
         }]
        });
       }, 250);
       
      });

     

       那样就获得了菜单,还会有网络亲密的朋友建议了异步菜单解决形式,笔者也把它列到上边

              

    解题思路3 : 同步加载全体的TAG,用hidden属性调控呈现   

         全部的tag必定要联手加载后才方可操纵component的hidden属性,异步加载不佳用。

          同步加载的方式如下:

            //FUTURE_TAG全局的TAG调控类, 调节的组件的hidden属性,key=TAG的名字,value=true(组件隐蔽),false(组件展现)
             var FUTURE_TAG={tbar1: false, tbar2: true};

    var conn = Ext.lib.Ajax.getConnectionObject().conn;  
    conn.open("GET", 'getJsonTags.do',false);  
    conn.send(null);  
    future_tag= eval('(' conn.responseText ')');

     

    在js中TAG的用法如下:

    var btn_add_system = new Ext.Button({
     text : '添加',
     iconCls : 'icon-add',
     hidden: FUTURE_TAG.system_add,  handler : function() {
      window_add_system.show();
     }
    });

     

    getJsonTags.do 重返四个Map对象,key是TAG名字,value是boolean

     java的写法如下:

    tagMap=new HashMap<String,Boolean>();
      for (int i=0;i<allTagList.size();i ){
       tagMap.put(allTagList.get(i).getResString(), true);
      }

     

    strut2配置如下:

      <action name="getJsonTags" class="jsonSystemAction" method="getJsonTags">
       <result type="json">
        <param name="root">tagMap</param>
       </result>
      </action>

     

    如此就可以在后台调节前台的零器件是不是出示了,进而落成了我们的指标。

     

     

     杀绝思路4:

     

    透过ajax读取服务器端的权位值,再次回到那样的数码:
    {tbar1: false, tbar2: true}
    然后在extjs中:
    var vResult = eval('(' ajaxText ')'); //得到{tbar1: false, tbar2: true}
    这般就可以直接给tbar赋值了
    disabled: vResult.tbar1
    disabled: vResult.tbar2  

     

     消除思路5:

     设置模块权限用于安装顾客能够操作的权力。允许设置客商对模块的可操作与不可操作。

     

     

    弹出设置权限子窗体

     

    设置权限以前须选拔一个客商。

     
    Js代码

        var row = grid_user.getSelectionModel().getSelected();         
                  if(!row){   
                      alert('对不起,您尚未选取数据!');   
                      return;   
                  }   

    var row = grid_user.getSelectionModel().getSelected();                  if(!row){                alert('对不起,您还未有采取数据!');              return;          }    

     

    创建豆蔻梢头棵树,树放置在弹出窗体的主题。

     
    Js代码

       1. var root=new Ext.tree.TreeNode({   
       2.                 id:"root",   
       3.                 text:"全部操作",   
       4.                 checked:false,   
       5.                 iconCls:'task-folder'  
       6.           });   
       7.              
       8.           var tree=new Ext.tree.TreePanel({   
       9.             frame:false,   
      10.             region:'center',   
      11.             root:root,   
      12.             animate:true,   
      13.             enableDD:false,   
      14.             border:false,   
      15.             rootVisible:true,   
      16.             autoScroll:true  
      17.          });  

    var root=new Ext.tree.TreeNode({                id:"root",                text:"全体操作",                checked:false,                iconCls:'task-folder'          });                    var tree=new Ext.tree.TreePanel({            frame:false,            region:'center',            root:root,            animate:true,            enableDD:false,            border:false,            rootVisible:true,            autoScroll:true         });

     

    创建弹出子窗体。

     
    Js代码

       1. var win = new Ext.Window({   
       2.             title:'设置模块权限',   
       3.             closable:true,   
       4.             width:300,   
       5.             height:500,   
       6.             plain:true,   
       7.             layout:'border',   
       8.             modal:true,   
       9.             items:[tree]   
      10.         });   
      11.         win.show(this);  

    var win = new Ext.Window({            title:'设置模块权限',            closable:true,            width:300,            height:500,            plain:true,            layout:'border',            modal:true,            items:[tree]        });        win.show(this);

     

    在加载数据里面,付与提醒。

     
    Js代码

       1. Ext.MessageBox.show({   
       2.             title:'请稍候',   
       3.             msg:'正在加载数据,请意志力等待...',   
       4.             progress:true              
       5.         });  

    Ext.MessageBox.show({            title:'请稍候',            msg:'正在加载数据,请意志力等待...',            progress:true                   });

     

    将根节点,所接受的客户行,父节点标志作为参数调用方法。

     
    Js代码

        getNodes(row,root,'root');  

    getNodes(row,root,'root');

     

     

    从后桃园收获数据并以树格局在客商端表现

     

    主意定义与办法内容。

     
    Js代码

        function getNodes(row,root,parent){   
               //...   
        }  

    function getNodes(row,root,parent){       //...}

     

    JSON 数据的概念。

     
    Js代码

        var record_pri = new Ext.data.Record.create([   
                           {name:'modelId'},   
                           {name:'modelName'},   
                           {name:'sort'},   
                           {name:'canUse'},   
                           {name:'privilegeId'}   
                       ]);   
               var store_pri = new Ext.data.Store({   
                   proxy: new Ext.data.HttpProxy({url:'../'}),   
                   reader: new Ext.data.JsonReader({root:'rows'},record_pri)   
              });  

    var record_pri = new Ext.data.Record.create([                    {name:'modelId'},                    {name:'modelName'},                    {name:'sort'},                    {name:'canUse'},                    {name:'privilegeId'}                ]);        var store_pri = new Ext.data.Store({            proxy: new Ext.data.HttpProxy({url:'../'}),            reader: new Ext.data.JsonReader({root:'rows'},record_pri)        });

     

    无刷新央浼,获取数据并彰显出来;并加上事件监听。当点击树某意气风发节点时,决断是或不是已经从后台得到数据,假如还没取则从后台获取数据,再依附再次来到的多寡判定是卡片节点依然非叶子节点。然后以区别的不二秘籍呈现与管理。

     

    叶子节点和非叶子节点表现时,使用的Logo差别。叶子节点未有拉长单击事件,而非叶子节点加多了单击事件。

     
    Js代码

       1. Ext.Ajax.request({   
       2.             url:'',   
       3.             params:{   
       4.                 userId:row.get('userId'),   
       5.                 parentId:parent   
       6.             },   
       7.             success:function(response, request){   
       8.                 Ext.MessageBox.hide();   
       9.                 var res = Ext.util.JSON.decode(response.responseText);   
      10.                 store_pri.loadData(res);   
      11.                 for(var i=0;i<store_pri.getCount();i ){   
      12.                     var rec = store_pri.getAt(i);   
      13.                     var canuse = (rec.get('canUse')=='是'?true:false);          
      14.                     var modid = rec.get('privilegeId') '-id-' rec.get('modelId');   
      15.                     var node;   
      16.                     if(rec.get('sort')=='菜单'){   
      17.                         node = new Ext.tree.TreeNode({   
      18.                             text:rec.get('modelName'),   
      19.                             id:modid,   
      20.                             checked:canuse,   
      21.                             iconCls:'task-folder'  
      22.                         });   
      23.                         node.on('click',function(node){   
      24.                             if(node.firstChild==null){   
      25.                                 getNodes(row,node,get_mod_id(node.id));   
      26.                              }   
      27.                         });   
      28.                     } else {   
      29.                         node = new Ext.tree.TreeNode({   
      30.                             text:rec.get('modelName'),   
      31.                             id:modid,   
      32.                             checked:canuse,   
      33.                             iconCls:'task'  
      34.                         });   
      35.                     }   
      36.                     node.on('checkchange',function(node,check){   
      37.                         Ext.Ajax.request({   
      38.                             url:'',   
      39.                             params:{   
      40.                                 privilegeId:get_rec_id(node.id),   
      41.                                 canuse:(check?'是':'否')   
      42.                             },   
      43.                             success:function(response, request){   
      44.                                
      45.                             },   
      46.                             failure:function(){   
      47.                                 Ext.MessageBox.hide();   
      48.                                 alert('sorry!');   
      49.                             }   
      50.                         });        
      51.                     });   
      52.                     root.appendChild(node);   
      53.                 }   
      54.                 root.expand();   
      55.             },   
      56.             failure:function(){   
      57.                 Ext.MessageBox.hide();   
      58.                 alert('sorry!');   
      59.             }   
      60.         });       

    Ext.Ajax.request({            url:'',            params:{                userId:row.get('userId'),                parentId:parent            },            success:function(response, request){                Ext.MessageBox.hide();                var res = Ext.util.JSON.decode(response.responseText);                store_pri.loadData(res);                for(var i=0;i<store_pri.getCount();i ){                    var rec = store_pri.getAt(i);                    var canuse = (rec.get('canUse')=='是'?true:false);                            var modid = rec.get('privilegeId') '-id-' rec.get('modelId');                    var node;                    if(rec.get('sort')=='菜单'){                        node = new Ext.tree.TreeNode({                            text:rec.get('modelName'),                            id:modid,                            checked:canuse,                            iconCls:'task-folder'                        });                        node.on('click',function(node){                            if(node.firstChild==null){                                 getNodes(row,node,get_mod_id(node.id));                             }                        });                    } else {                        node = new Ext.tree.TreeNode({                            text:rec.get('modelName'),                            id:modid,                            checked:canuse,                            iconCls:'task'                        });                    }                    node.on('checkchange',function(node,check){                        Ext.Ajax.request({                            url:'',                            params:{                                privilegeId:get_rec_id(node.id),                                canuse:(check?'是':'否')                            },                            success:function(response, request){                                                        },                            failure:function(){                                Ext.MessageBox.hide();                                alert('sorry!');                            }                        });                         });                    root.appendChild(node);                }                root.expand();            },            failure:function(){                Ext.MessageBox.hide();                alert('sorry!');            }        });     

     

    当非叶子节点被点击时,递归地调用方法来博取孩子节点。

     

    获得行的ID和模块的ID。树的节点将行的ID和模块的ID一齐抽出来了。不然的话,借使只获得模块ID,而不取行ID,那么在改良的时候,则无法拓宽不易的改换。

     
    Js代码

        function get_rec_id(str){   
                var arr = str.split('-id-');   
                return arr[0];   
            }   
            function get_mod_id(str){   
                var arr = str.split('-id-');   
                return arr[1];   
           } 

     

    本文由新葡亰496net发布于奥门新萄京娱乐场,转载请注明出处:新葡亰496net:异步获取和刷新ExtJS6,哪位达人能

    关键词:

上一篇:新葡亰496netmysql运转条件,php情况陈设

下一篇:没有了