nestedList和navigationview其實沒啥直接的關系,同根生,都是容器組件而以,操作上有點點相似的地方就是,在顯示下一層的時候會自動創建toolbar和返回銨鈕,先了解這么多,下面慢慢玩玩它們兩個。
nestedList就是一個樹導航組件,它需要綁定樹型的數據結構treestore
navigationview是個有趣的導航組件,他可以像棧一樣,去操作view。通過調用push來顯示下一層view,通過pop來關閉當前顯示的子view
先來玩nestedList吧
//定義一個數據模型,它只有一個text字段 Ext.define('ListItem', { extend: 'Ext.data.Model', config: { fields: ['text'] } }); //創建一個樹型存儲結構,注意看葉子節點需要標識:leaf: true var treeStore = Ext.create('Ext.data.TreeStore', { model: 'ListItem', defaultRootProperty: 'items', root: { items: [ { text: 'Drinks', items: [ { text: 'Water', items: [ { text: 'Still', leaf: true }, { text: 'Sparkling', leaf: true } ] }, { text: 'Soda', leaf: true } ] }, { text: 'Snacks', items: [ { text: 'Nuts', leaf: true }, { text: 'Pretzels', leaf: true }, { text: 'Wasabi Peas', leaf: true } ] } ] } }); //創建一個創屏的nestedList,並將這個樹型數據綁定起來 Ext.create('Ext.NestedList', { fullscreen: true, //數據 store:treeStore, //顯示model中的哪一個字段 displayField:'text', updateTitleText:false, //只有上面這項為false時,title才管用,要不然會被你的字段更新掉 title:'我的測試', //是否使用title做為返回按鈕的text【你可以改為true玩玩】 useTitleAsBackText:false, //返回按鈕的文字,只有當面上這項為false時才有用 backText:'返回', //是否在列表顯示箭頭按鈕 onItemDisclosure:true, //點擊葉節點的時候要顯示的內容 detailCard:{xtype:'container',html:'my name is walter!'}, listeners: { //葉子節點項點擊事件 leafitemtap:function(nlist,list,index,target,record) { alert("它將顯示detailCard的內容!"); //我們調用detailCard,然后設置內容 nlist.getDetailCard().setHtml("你選擇的是:"+record.get("text")); }, //列表項點擊事件 itemtap:function() { //alert("點擊了列表項!"); } } });
效果:
主要是看看備注,把一些關鍵的配置掌握好哦。先不要急於這個數據源如何來,后面我們會講,如何從數據庫里獲取數據進行樹綁定。
有同學會問,控制顯示項的內容呢?
這個東東很重要,通常我可以不緊緊是顯示,我可能會跟據規則,把一些項高亮或.....這里我們需要重寫一個方法:getItemTextTpl
//定義一個數據模型,它只有一個text字段 Ext.define('ListItem', { extend: 'Ext.data.Model', config: { fields: ['text'] } }); //創建一個樹型存儲結構,注意看葉子節點需要標識:leaf: true var treeStore = Ext.create('Ext.data.TreeStore', { model: 'ListItem', defaultRootProperty: 'items', root: { items: [ { text: 'Walter', items: [ { text: 'Water', items: [ { text: 'Still', leaf: true }, { text: 'Sparkling', leaf: true } ] }, { text: 'Soda', leaf: true } ] }, { text: 'Snacks', items: [ { text: 'Nuts', leaf: true }, { text: 'Pretzels', leaf: true }, { text: 'Wasabi Peas', leaf: true } ] } ] } }); //自定義一個view Ext.define('MyTree', { xtype:'myTree', extend: 'Ext.NestedList', //我們重寫一下列表項顯示模板 getItemTextTpl: function(node) { return '<span style="color:red;">{' + this.getDisplayField() + '}</span>'; }, }); //創建一個全屏的nestedList,並將這個樹型數據綁定起來 Ext.create('MyTree', { fullscreen: true, //數據 store:treeStore, //顯示model中的哪一個字段 displayField:'text', updateTitleText:false, //只有上面這項為false時,title才管用,要不然會被你的字段更新掉 title:'我的測試', //是否使用title做為返回按鈕的text【你可以改為true玩玩】 useTitleAsBackText:false, //返回按鈕的文字,只有當面上這項為false時才有用 backText:'返回', //是否在列表顯示箭頭按鈕 onItemDisclosure:true, //點擊葉節點的時候要顯示的內容 detailCard:{xtype:'container',html:'my name is walter!'}, listeners: { //葉子節點項點擊事件 leafitemtap:function(nlist,list,index,target,record) { alert("它將顯示detailCard的內容!"); //我們調用detailCard,然后設置內容 nlist.getDetailCard().setHtml("你選擇的是:"+record.get("text")); }, //列表項點擊事件 itemtap:function() { //alert("點擊了列表項!"); } } });
看效果:
看吧,呵呵,列表項顯示為紅色了.
nestedList,最大的問題就是在於你這數據源,當你從后台讀取的時候一定要注意,數據結構一定要是樹形。
nestedList就介紹這些唄,把我的實例你碼拿下來,看看備注,行屬性玩玩,值為true的改false去玩玩,測測,配合API文檔,試試玩玩其他屬性。
下現我們再講下
navigationview,它是個很單純的玩意,子面意思就是導航view,如果你不習慣他,你完全可以自己用 card布局加toolbar去完成這樣一個導航view.
不說了,上菜(代碼)
//創建一個全屏的導航view var view=Ext.create("Ext.NavigationView", { fullscreen:true, //返回按鈕的文字,不設置默認為:back defaultBackButtonText:'返回', //你如果想對導航欄做一些改變,如你想放到下面,或上面就可以用它來配置,如果不喜你可以去掉 navigationBar: { ui: 'dark', docked: 'top', items:[{xtype:'spacer'},{xtype:'spacer'},{xtype:'button',text:'設置',handler:function() { Ext.Msg.alert("系統提示","你想干嘛?"); }}] }, items: [ { //第一層view的標題 title: '導航View綜合合實例', //內邊距為10個像素 padding: 10, items: [ { //第一層view里面添加一個button按鈕 xtype: 'button', text: '彈出第二層view!', handler: function() { //在view里面顯示第二層view 使用push方法 view.push({ title: '第二層view', padding: 10, items: [ { //第二次view下面添加一個button xtype: 'button', text: '彈出第三層view', handler: function() { view.push({ title: '第三層view', padding: 10, items: [ { //第三次view下面添加一個button xtype: 'button', text: '我是最后一層view了', handler: function() { Ext.Msg.alert("系統信息","我是最后一層view了再點也不會彈!"); } }, { xtype:'button', text:'你可以點擊我,返回第二層', margin:10, handler:function() { //返回到上一層 view.pop(); } }] }); } } ] }); } } ] } ] });
效果:
我就不多說其他的了,注意pop和push方法,其他的,你看代碼備注吧,在code editor中邊玩邊搞唄。
有問題的同學可以加入我們的社區或群:13453484在線提問,我盡速解答。
作者:Louja
出處:http://html5mob.cnblogs.com 同步在:http://html5mob.com
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此聲明,且在文章頁面給出原文連接,否則保留追究法律責任的權利。