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

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

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

    贏在執(zhí)行

    這個世界上只有兩樣?xùn)|西愈分享愈多,那就是智慧與愛。

    BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
      17 Posts :: 11 Stories :: 13 Comments :: 0 Trackbacks
    講講如何使用Ext菜單器件

    這篇教程中,我們將學(xué)習(xí)使用Ext的菜單器件(Menu Widgets)。假設(shè)讀者已經(jīng)閱讀過Ext簡介一文,并懂得一些Ext的基本相關(guān)知識。菜單器件是Ext庫中較遲實現(xiàn)的器件。它由幾個類聯(lián)合構(gòu)成,使得創(chuàng)建一個菜單只需若干代碼塊(Block of code)。


    開始!

    第一步要做的是,下載本教程的示例文件。Zip文件包括三個文件:ExtMenu.html,、ExtMenu.jsExtMenu.css、list-items.gif。解包這四個文件到Ext的安裝目錄中(例如,Ext是在“C:\code\Ext\v1.0”中,那應(yīng)該在"v1.0"里面新建目錄“menututorial”。雙擊ExtMenu.htm,接著你的瀏覽器打開啟動頁面,應(yīng)該會有一條消息告訴你配置已完畢。如果是一個Javascript錯誤,請按照頁面上的指引操作。

    在你常用的IDE中或文本編輯器中,打開ExtMenu.js看看:

    Ext.onReady(function() {
    	alert("You have Ext configured correctly! We are now ready to do some Ext Menu Magic!"); 
     }); 
    	 

    在Ext的介紹中,我們討論過使用Ext的原因和Ext.onReady()函數(shù)的功能。


    創(chuàng)建簡易的菜單

    先看看怎么做一個基本的菜單,然后再討論代碼中的各個組件和知識點。加入下列代碼到onReady函數(shù)中:

     
    var menu = new Ext.menu.Menu({
        id: 'basicMenu',
        items: [{
                text: 'An item',
                handler: clickHandler
            },
            new Ext.menu.Item({
                text: 'Another item',
                handler: clickHandler
            }),
            '-',
            new Ext.menu.CheckItem({
                text: 'A check item',
                checkHandler: checkHandler
            }),
            new Ext.menu.CheckItem({
                text: 'Another check item',
                checkHandler: checkHandler
            })
        ]
    });
    
    var tb = new Ext.Toolbar('toolbar', [{
            text:'Our first Menu',
            menu: menu  // 分配menu到按鈕
        }
    ]);
    
    function clickHandler() {
        alert('Clicked on a menu item');
    }
    
     function checkHandler() {
        alert('Checked a menu item');
    }
      

    OK 仔細(xì)看看這里的代碼,首先實例化一個Menu類為變量“menu”。然后Menu的構(gòu)建函數(shù)接受一串的Object Literal作為參數(shù),在先前的Ext教程中我們已經(jīng)討對ObjectLiteral進(jìn)行了解。當(dāng)前的ObjectLiteral就包含了我們菜單中想要的屬性。第一個屬性是我們分配的ID,稍后我們可以ID來獲取Menu的引用。


    各種Item的類型

    屬性“items”可能是最重要的屬性當(dāng)中的一個。留意一下語法其實我們是將一個數(shù)組作為值(value)傳到屬性中去。數(shù)組里的數(shù)據(jù)就是我們想要在菜單中出現(xiàn)的每一項。每本例中我們放了六個菜單項,但何解每項的語法(Syntax)都不盡相同呢?第一項是一串Object Literal,包含一組我們可配置的name/value。Ext的底層庫會為這串Object Literal按其配置默認(rèn)地創(chuàng)建item對象。接著第二項是Item對象本身,后面跟著分隔符,最后兩個是單選框項。整個過程演示了Ext Widget如何動態(tài)的運行。下例各項可填入到數(shù)組中:

    {text: 'Foo'}                       // Ext 轉(zhuǎn)換這個配置對象到menu item
    'Straight Text'                     //文本或原始html (純文字)
    '-'                                 // 創(chuàng)建分隔符
    new Ext.menu.Item({text: 'Foo'})    // 創(chuàng)建一個標(biāo)準(zhǔn)item (同{text: 'Foo'})
    new Ext.menu.CheckItem()            // 創(chuàng)建單選框item
    new Ext.menu.DateItem()             // 創(chuàng)建menu內(nèi)置的日歷控件
    new Ext.menu.ColorItem()            //創(chuàng)建一個顏色采集器
    new Ext.menu.BaseItem(document.getElementById('my-div')) //允許你加入任何元素
    

    Item屬性

    Item接受什么類型的屬性呢?本例中我們使用了這兩屬性:

    text: 'An item',
    handler: clickHandler
    

    第一個是Item的文本。第二個是當(dāng)用戶單擊一單擊Item所觸發(fā)的事件處理函數(shù)(event handler function)。本例中我們將函數(shù)clickHandler()和checkHandler()定義在代碼的最后。作為演示用途,這僅僅是用alert()通知你有一個單擊的消息。
    其它有用的屬性是:

    cls: 'a-class-name'  ,       // 為標(biāo)準(zhǔn)Item手動設(shè)置樣式和圖標(biāo)ICON
    icon: 'url',                 // 如不想用CSS,可直接設(shè)置圖標(biāo)的URL
    group: 'name of group',      //只適用多選項,保證只有一項被選中
    

    完整的item屬性列表在Menu Item文檔中。

    在UI中擺放菜單

    So,創(chuàng)建好的Menu對象已經(jīng)有兩個基本的item了,然而我們怎么把它們擺放到頁面中呢?在UI中一個menu可以分配到多個位置(同一個對象,不同位置多次使用),這正是Ext如此強大的原因:每一個器件(widget)切成“一塊一快”的類,來構(gòu)建整個面向?qū)ο蟮膭討B(tài)結(jié)構(gòu)(Structure)。這意味著menu可用于不同的場合。我們可將menu放到有按鈕的toolbar中,或用頁面中的一個按鈕來展開menu,甚至可在Ext的其它器件中(widgets)使用menu作為上下文菜單(Context Menu)。

    本例中分配一個menu到toolbar中:

    var tb = new Ext.Toolbar('toolbar', [{
            text:'Our first Menu',
            menu: menu  // 分配menu到toolbar
        }
    ]);
    

    Ext.Toolbar構(gòu)建函數(shù)接受兩個參數(shù),第一個是指定toolbar的容器(contrainer);第二個參數(shù)是包含全部按鈕的數(shù)組。這里,我們只使用一個按鈕,正如所見,按鈕實質(zhì)上是一串由數(shù)組組成的Object Literal,同時這個Object Litetal亦包含了不同的屬性。下面是一組按鈕對象的Object Litetal屬性:

    cls: 'a-class-name'  ,      //手動設(shè)置樣式和圖標(biāo)ICON
    icon: 'url',                // 如不想用CSS,可直接設(shè)置圖標(biāo)的URL
    text:'Our first Menu',      // 按鈕提示之文字
    menu: menu                  // 可以是menu之id或配置對象
    

    Menu的分配方式:

    剛才談到如何分配Menu到工具條中(toolbar),繼而亦討論menu分配的不同方式,看看有關(guān)的細(xì)節(jié)是怎樣的。So,因為menu屬性可以以不同方式地分配,即是可以賦予一個menu對象,或是已經(jīng)建好的menuID,或直接是一個menu config對象。你應(yīng)該有機會就嘗試一下以多種方式創(chuàng)建menu,因為類似的方式方法在Ext的Widgets隨處可見。下面的代碼演示了如何用不同的方法來做出跟范例一樣的效果,唯一相同的就是menu對象的config。菜單中包括兩個子菜單、一個DataItem容器、一個ColorItem容器。另外注意event handing函數(shù)需兩個參數(shù)來獲取事件更多的信息和知道哪個item被單擊了。可以的話,把下面的代碼也加入到onReady函數(shù)中,親身體驗一下:

    var dateMenu = new Ext.menu.DateMenu({
        handler : function(datepicker, date){
            alert('Date Selected', 'You chose: '+ date.format('M j, Y'));
        }
    });
    
    var colorMenu = new Ext.menu.Menu({
        id: 'colorMenu', // the menu's id we use later to assign as submenu
        items: [
            new Ext.menu.ColorItem({
                selectHandler: function(colorpicker, color){
                    alert('Color Selected', 'You chose: ' + color);
                }
            })
        ]
    });
    
    var tb = new Ext.Toolbar('toolbar', [{
            text:'Our first Menu',
            menu: {
                id: 'basicMenu',
                items: [{
                        text: 'An item',
                        handler: clickHandler
                    }, {
                        text: 'Another item',
                        handler: clickHandler
                    },
                    '-',
                    new Ext.menu.CheckItem({
                        text: 'A check item',
                        checkHandler: checkHandler
                    }),
                    new Ext.menu.CheckItem({
                        text: 'Another check item',
                        checkHandler: checkHandler
                    }),
                    '-', {
                        text: 'DateMenu as submenu',
                        menu: dateMenu, // assign the dateMenu we created above by variable reference,
                        handler: date
                    }, {
                        text: 'Submenu with ColorItem',
                        menu: 'colorMenu'    // we assign the submenu containing a ColorItem using it's id
                    }
                ]
            }
        }
    ]);
    
    function clickHandler(item, e) {
        alert('Clicked on the menu item: ' + item.text);
    }
    
    function checkHandler(item, e) {
        alert('Checked the item: ' + item.text);
    }
        
    

    注意:留意幾種不同的方法加入子菜單!還有even handing函數(shù)和Coloritem、DataMenu匿名函數(shù)之間的區(qū)別。


    練一練

    Ok我們用上述的方法,創(chuàng)建了toolbar和menu,看起來應(yīng)該是這樣的:

    上文提及menu可擺放在UI的任何位置,這里將為你演示menu如何與Toolbars、MeneuButtons、Context Menus's配合工作,包括一些有用的方法和動態(tài)添加的功能。

    MenuButton
    new Ext.MenuButton('menubutton', {text:'Menu Button 1', menu: dateMenu});
    

    動態(tài)添加菜單按鈕到Toolbar

    這條Toolbar有兩個按鈕。一個分隔符,和一個純圖標(biāo)的按鈕(附Quicktips)。你可嘗試這樣做,把zip文件中.gif加入

    Ext.QuickTips.init();
    
    tb.add('-', {
        icon: 'list-items.gif', //圖標(biāo)可單行顯示
        cls: 'x-btn-icon',      // 純圖標(biāo)
        tooltip: 'Quick Tips
    提示文字' });

    更方便的是

    一些代碼片段,有助你提高效率,留意注釋!

    // Menus更多的API內(nèi)容
    // 動態(tài) 增、減元素
    
    menu.addSeparator(); //動態(tài)加入分隔符
    
    var item = menu.add({
        text: 'Dynamically added Item'
    });
    
    // items 完整支持Observable API
    item.on('click', onItemClick);
    
    // items can easily be looked up
    menu.add({
        text: 'Disabled Item',
        id: 'disableMe'  // <-- 設(shè)置ID便于查找lookup
        // disabled: true   <-- 先不disabled 而采用下面的方式
    });
    
    // 用 id 或 index訪問
    menu.items.get('disableMe').disable();
    
    

    下一步是

    現(xiàn)在你已經(jīng)了解菜單組件是如何工作了。下面的資源有助您進(jìn)一步更深入學(xué)習(xí)菜單:

    posted on 2007-03-16 16:40 飛雪(leo) 閱讀(1918) 評論(0)  編輯  收藏 所屬分類: YUI.Ext專區(qū)

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲啪啪AV无码片| 日本高清免费中文字幕不卡| 青青在线久青草免费观看| 18pao国产成视频永久免费| 久久经典免费视频| 国产一级理论免费版| 中文字幕亚洲一区二区va在线| 亚洲av无码国产精品色午夜字幕 | 久久久久国产成人精品亚洲午夜| 亚洲中文字幕久久精品无码喷水| 亚洲无线电影官网| 亚洲人成人网毛片在线播放| 日本不卡免费新一区二区三区| 久久一区二区三区免费播放| 免费精品国产自产拍在| 国产精品免费看香蕉| 亚洲色成人网站WWW永久| 亚洲欧洲日产专区| 在线亚洲精品视频| 亚洲免费人成在线视频观看| 日韩视频在线精品视频免费观看 | 亚洲va在线va天堂va不卡下载| 亚洲精品亚洲人成在线播放| 特级毛片在线大全免费播放| 免费视频成人片在线观看| 日韩免费一区二区三区| 亚洲精品国产精品乱码不卡√| 免费在线观看污网站| 亚洲AV日韩AV天堂久久| 亚洲AV无码之国产精品| 中文字幕在线免费看| 毛片免费在线视频| 亚洲精品国精品久久99热一| 97se亚洲国产综合自在线| 韩国免费a级作爱片无码| 无码日韩人妻av一区免费| 青青草原亚洲视频| 中国china体内裑精亚洲日本| 精品免费久久久久国产一区| 毛片a级三毛片免费播放| 亚洲大尺度无码专区尤物|