<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    狂奔 lion

    自強不息

    Ext中Combo組件的聯(lián)動封裝

    在Extjs中構(gòu)造N級聯(lián)動下拉的麻煩不少,需定制下拉數(shù)據(jù)并設定響應事件。通過對Combo集合的封裝,無需自己配置Combo,只需設定數(shù)據(jù)和關聯(lián)層級,即可自動構(gòu)造出一組支持正向和逆向過濾的聯(lián)動下拉并獲取其中某一個的實例。
    如:
    數(shù)據(jù):
    Ext.test = {};   
      
    Ext.test.lcbdata 
    = [{   
        level: 
    1//下拉層級,可以是數(shù)字或字符串   
        type: '11', //所有父類別累加+本級類別   
        text: 'text1',//顯示文本   
        value: '11'//值   
    }
    ,{   
        level: 
    1,   
        type: '
    12',   
        text: 'text2',   
        value: '
    12'  
    }
    ,{   
        level: 
    2,   
        type: '
    111',   
        text: 'text3',   
        value: '
    111'  
    }
    ,{   
        level: 
    3,   
        type: '
    1111',   
        text: 'text4',   
        value: '
    1111'  
    }
    ];  
    使用:
    var lcb = new Ext.custom.LinkComboBag(Ext.test.lcbdata, [123]); //第二個參數(shù)的數(shù)組順序就是下拉的層級順序   
    var lv1 = lcb.getComboByLevel(1); //level值是1的ComboBox   
    var lv2 = lcb.getComboByLevel(2);   
    var lv3 = lcb.getComboByLevel(3);  
    實現(xiàn):
    Ext.custom = {};

    /**
     * 封裝了聯(lián)動下拉的數(shù)據(jù)和數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換的Ext類
     * 需要傳入數(shù)據(jù):
     * 1 聯(lián)動下拉數(shù)據(jù)
     * 2 combo數(shù)組(要求定義level屬性)或者level數(shù)組
     * 
     * @author 楊一
     * @date 2009-7-1
     
    */

    Ext.custom.LinkComboBag 
    = function(data, combos) {
        
    this.data = data || [];
        
    // 按照各個聯(lián)動的順序傳入下拉數(shù)組
        this.combos = combos || [];
        
    // 持有各個聯(lián)動數(shù)據(jù)的引用
        this.stores = {};
        
    // 構(gòu)造關聯(lián)部分
        var thisObj = this;
        
    // 初始化下拉
        for (var i = 0; i < combos.length; i++{
            
    if(combos[i] instanceof Object){
            }
    else{
                combos[i] 
    = {
                    level: combos[i]
                }

            }

            
            combos[i].id 
    = Ext.id();
            combos[i][
    "xtype"= 'combo';
            combos[i][
    "editable"= false;
            combos[i][
    "emptyText"= '請選擇';
            combos[i][
    "displayField"= 'text';
            combos[i][
    "valueField"= 'value';
            combos[i][
    "triggerAction"= 'all';
            combos[i][
    "mode"= 'local';
            
            combos[i][
    "store"= this.buildStore(combos[i].level);
            
    // 回調(diào)函數(shù)
            combos[i]["listeners"= {
                'beforeselect' : 
    function(combo, record, index) {
                    
    // 找到當前的下拉索引號
                    for (var k = 0; k < combos.length; k++{
                        
    if (combos[k].level === combo.level)
                            
    break;
                    }

                    
    // 遍歷所有當前下拉后的組件下拉
                    for (var j = k + 1; j < combos.length; j++{
                        
    // 清空這些下拉的數(shù)據(jù)集
                        Ext.getCmp(combos[j].id).clearValue();
                    }

                    
    // 如果存在下一個下拉
                    if (k + 1 < combos.length)
                        
    // 把下一個下拉重新設定數(shù)據(jù)集
                        thisObj.change(combos[k + 1].level, record.get('type'));
                    thisObj.reverseSelect(combo.level, record.get('type'));
                }

            }

        }

    }
    ;
    /**
     * 按照索引獲取下拉
     * 
     * @param index
     *            下拉索引
     * @return 組件下拉
     
    */

    Ext.custom.LinkComboBag.prototype.getComboByIndex 
    = function(index){
        
    return this.combos[index];
    }


    /**
     * 按照層級獲取下拉
     * 
     * @param level
     *            下拉層級
     * @return 組件下拉
     
    */

    Ext.custom.LinkComboBag.prototype.getComboByLevel 
    = function(level){
        
    for(var i=0;i<this.combos.length;i++){
            
    if(this.combos[i].level == level)
                
    return this.combos[i];
        }

        
    return null;
    }


    /**
     * 建立一個默認的store并持有其引用
     * 
     * @param level
     *            combo所屬的層次
     * @return 建立的數(shù)據(jù)集store
     
    */

    Ext.custom.LinkComboBag.prototype.buildStore 
    = function(level) {
        
    if (!this.stores[level])
            
    this.stores[level] = new Ext.data.SimpleStore({
                fields : [
    "type""text""value"],
                sortInfo : 
    {
                    field : 
    "type",
                    direction : 
    "ASC"
                }

            }
    );
        
    this.initData(level);
        
    return this.stores[level];
    }
    ;

    /**
     * 根據(jù)制定的層級初始化一個combo使用的數(shù)據(jù)集 也可以采用Store:Filter的形式實現(xiàn)
     * 
     * @param level
     *            combo所屬的層次
     * @param type
     *            選項類別
     
    */

    Ext.custom.LinkComboBag.prototype.initData 
    = function(level) {
        
    var reData = [];
        
    var index = 0;
        
    for (var i = 0; i < this.data.length; i++{
            
    if (this.data[i].level == level)
                reData[index
    ++= [this.data[i].type, this.data[i].text,
                        
    this.data[i].value];
        }

        
    this.stores[level].loadData(reData, false);
    }
    ;

    /**
     * 根據(jù)制定的層級及父類別更新一個combo使用的數(shù)據(jù)集 也可以采用Store:Filter的形式實現(xiàn)
     * 
     * @param level
     *            combo所屬的層次
     * @param type
     *            選項類別
     
    */

    Ext.custom.LinkComboBag.prototype.change 
    = function(level, type) {
        
    var reData = [];
        
    var index = 0;
        
    for (var i = 0; i < this.data.length; i++{
            
    if (this.data[i].level == level
                    
    && this.data[i].type.substr(0, type.length) === type)
                reData[index
    ++= [this.data[i].type, this.data[i].text,
                        
    this.data[i].value];
        }

        
    this.stores[level].loadData(reData, false);
    }
    ;

    /**
     * 反向選擇,改變值,不改變數(shù)據(jù)集
     * 
     * @param level
     *            combo所屬的層次
     * @param type
     *            選項類別
     
    */

    Ext.custom.LinkComboBag.prototype.reverseSelect 
    = function(level, type) {
        
    //找到當前組件索引號
        for (var k = 0; k < this.combos.length; k++{
            
    if (this.combos[k].level === level)
                
    break;
        }

        
    //遍歷所有前面的組件
        for(var j=k-1;j>=0;j--){
            
    for (var i = 0; i < this.data.length; i++{
                
    if (this.data[i].level == this.combos[j].level
                    
    && type.substr(0, type.length - 2*(k - j)) == this.data[i].type){
                    Ext.getCmp(
    this.combos[j].id).setValue(this.data[i].value);
                }

            }

        }

    }
    ;


     @2008 楊一. 版權(quán)所有. 保留所有權(quán)利

    posted on 2010-06-25 19:14 楊一 閱讀(1306) 評論(0)  編輯  收藏 所屬分類: Other Tech

    <2010年6月>
    303112345
    6789101112
    13141516171819
    20212223242526
    27282930123
    45678910

    導航

    公告

    本人在blogjava上發(fā)表的文章及隨筆除特別聲明外均為原創(chuàng)或翻譯,作品受知識產(chǎn)權(quán)法保護并被授權(quán)遵從 知識分享協(xié)議:署名-非商業(yè)性使用-相同方式共享 歡迎轉(zhuǎn)載,請在轉(zhuǎn)載時注明作者姓名(楊一)及出處(m.tkk7.com/yangyi)
    /////////////////////////////////////////
    我的訪問者

    常用鏈接

    留言簿(5)

    隨筆分類(55)

    隨筆檔案(55)

    相冊

    Java

    其他技術

    生活

    最新隨筆

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    自強不息


    用心 - 珍惜時間,勇于創(chuàng)造
    主站蜘蛛池模板: 亚洲午夜激情视频| 亚洲高清一区二区三区电影| 亚洲男人天堂2022| 一级特黄录像免费播放肥| 亚洲国产专区一区| 国产成人精品亚洲日本在线| 69xx免费观看视频| 亚洲噜噜噜噜噜影院在线播放| xxxxx免费视频| 亚洲国产精品综合久久20| 欧美最猛性xxxxx免费| 亚洲乱妇熟女爽到高潮的片| 女人让男人免费桶爽30分钟| 亚洲美国产亚洲AV| 国产伦精品一区二区三区免费迷| 国产精品亚洲а∨无码播放不卡| 成年人网站免费视频| 国产精品亚洲精品青青青| 成人免费视频国产| a免费毛片在线播放| 国产大片线上免费看| 亚洲av福利无码无一区二区 | 免费一级毛片在线播放视频| 韩日电影在线播放免费版| 亚洲国产成人久久综合碰| 日韩在线视频播放免费视频完整版| 亚洲高清成人一区二区三区 | 亚洲va久久久噜噜噜久久狠狠| 一级看片免费视频| 久久精品乱子伦免费| 亚洲精品第一国产综合精品99| 一级特级aaaa毛片免费观看 | 亚洲AV无码国产精品色午友在线| 最近中文字幕大全免费版在线| 亚洲男人天堂av| 国产成人精品免费视频动漫| 亚洲永久网址在线观看| av电影在线免费看| 九月丁香婷婷亚洲综合色| 国产综合成人亚洲区| 免费被黄网站在观看|