<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)載時注明作者姓名(楊一)及出處(www.tkk7.com/yangyi)
    /////////////////////////////////////////
    我的訪問者

    常用鏈接

    留言簿(5)

    隨筆分類(55)

    隨筆檔案(55)

    相冊

    Java

    其他技術

    生活

    最新隨筆

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    自強不息


    用心 - 珍惜時間,勇于創(chuàng)造
    主站蜘蛛池模板: 亚洲精品自产拍在线观看| xxxxxx日本处大片免费看| 国产亚洲一区二区三区在线观看 | 亚洲国产a级视频| 噼里啪啦免费观看高清动漫4| A片在线免费观看| 一区二区免费电影| 久久亚洲欧美国产精品| 亚洲国产精品日韩在线观看| 狠狠色伊人亚洲综合成人| 又大又粗又爽a级毛片免费看| 免费电视剧在线观看| 永久在线观看www免费视频| 免费久久人人爽人人爽av| 日韩免费码中文在线观看| 亚洲av日韩综合一区二区三区| 亚洲人成电影院在线观看| 亚洲美女一区二区三区| 亚洲av无码一区二区乱子伦as| 亚洲情侣偷拍精品| 免费女人18毛片a级毛片视频| 日本成人在线免费观看| 久久久www成人免费毛片| 免费观看美女用震蛋喷水的视频| 免费观看久久精彩视频| a级毛片在线视频免费观看| 国产免费福利体检区久久| www免费黄色网| 好男人资源在线WWW免费| 国产精品免费看久久久香蕉| 成年网站免费入口在线观看| 色www免费视频| 特黄特色的大片观看免费视频| 小说专区亚洲春色校园| 色屁屁在线观看视频免费| 成人免费观看男女羞羞视频| 一级一级一级毛片免费毛片| 51午夜精品免费视频| a级精品九九九大片免费看| 国产精品免费大片| 91精品视频在线免费观看|