2009年8月10日 星期一

extjs - Ext.TabPanel 簡介


Ext.TabPanel中文名稱我也不知道稱為啥?不過感覺Tab應該是指標籤的意思,用於將panel分成幾個群組。
Ext.TabPanel算是個基本的container,所以可以將您想顯示的東西放入items中,就可以顯示了。
最基本的TabPanel如下:
Ext.onReady(function() {
    var tp = new Ext.TabPanel({
        renderTo: Ext.getBody(),
        // activeTab: 1,
        width:300,
        height: 200,
        items: [
            {title: 'p1', html: 'content 1'},
            {title: 'p2', html: 'content 2'}
        ]
    });
});

activeTab指出在初始化的時候顯示的頁面,預設是不顯示任何頁面的。

剛剛提到, TabPanel算是container,所以也可以放置其他元件。
Ext.onReady(function() {
    var form = new Ext.form.FormPanel({
        title: 'p2',
        defaultType: 'textfield',
        items: [{
            fieldLabel: 'name'
        }],
        buttons: [{
            text: 'send'
        }]
    });
    var tp = new Ext.TabPanel({
        renderTo: Ext.getBody(),
        activeTab: 1,
        width:300,
        height: 200,
        items: [
            {title: 'p1', html: 'content 1'},
            form // 在第二個頁面放置一個表單元件.
        ]
    });
});


也可以使用autoLoad載入URL(使用Ext.Updater.update Object),當成頁面的內容,如果有script要執行的話,必需將scripts設為true。
Ext.onReady(function() {
    var tp = new Ext.TabPanel({
        renderTo: Ext.getBody(),
        activeTab: 1,
        width:300,
        height: 200,
        items: [
            {title: 'p1', html: 'content 1'},
            {title: 'p2', autoLoad: {url: 'tab.html', scripts: true}}
        ]
    });
});


2009年8月5日 星期三

extjs - Ext.tree.TreePanel 簡介


Ext.tree.TreePanel繼承自Ext.Panel,算是個container,必須給予節點(node)才能形成完整的樹。也就是說在render之前必須設定好root這個node。

空的樹(直接用renderTo())
Ext.onReady(function() {
    var root = new Ext.tree.TreeNode({
        id: "root",
        text:'B_root'
    });
    root.appendChild(new Ext.tree.TreeNode({
        id: 'c1',
        text: 'B_C1'
    }));

    var tree = new Ext.tree.TreePanel({
        renderTo: 't', //要有個div的id為't'
        width: 150,
        height: 50,
        root: root
    });
});

或者(用el+render())
Ext.onReady(function() {
    var root = new Ext.tree.TreeNode({
        id: "root",
        text:'B_root'
    });
    root.appendChild(new Ext.tree.TreeNode({
        id: 'c1',
        text: 'B_C1'
    }));

    var tree = new Ext.tree.TreePanel({
        el: 't', //要有個div的id為't'
        width: 150,
        height: 50,
        root: root
    });
    tree.render();
});

利用setRootNode設定Root
Ext.onReady(function() {
    var root = new Ext.tree.TreeNode({
        id: "root",
        text:'B_root'
    });

    root.appendChild(new Ext.tree.TreeNode({
        id: 'c1',
        text: 'B_C1'
    }));

    var tree = new Ext.tree.TreePanel({
        el: 't', //要有個div的id為't'
        width: 150,
        autoHeight: true // 自動調整高度
    });
    tree.setRootNode(root);
    tree.render();
});

如果想動態變動root請參考https://extjs.net/forum/showthread.php?p=217227#post217227

可以利用Ext.tree.AsyncTreeNod定義樹狀結構,程式碼如下:
Ext.onReady(function() {
    var root = new Ext.tree.AsyncTreeNode({
        id: 'aRoot',
        text: 'root',
        children: [
            {id: 1, text: 'A leaf Node', leaf: true},
            {id: 2, text: 'A folder Node', children: [
                {id: 3, text: 'A child Node', leaf: true}]
            }
        ]
    });
    var tree = new Ext.tree.TreePanel({
        el: 't', //要有個div的id為't'
        width: 150,
        autoHeight: true,
        root: root
    });
    tree.render();
});

記得如果是樹葉,記得要設定leaf:true,否則會認為不是leaf所以一直處於讀取狀態。

expandPath( String path, [String attr], [Function callback] ) : void
展開TreePanel中特定的路徑,比如我們要展開id2的id3:
Ext.onReady(function() {
    var root = new Ext.tree.AsyncTreeNode({
        id: 'aRoot',
        text: 'root',
        children: [
            {id: 1, text: 'A leaf Node', leaf: true},
            {id: 2, text: 'A folder Node', children: [
                {id: 3, text: 'A child Node', leaf: true}]
            }
        ]
    });
    var tree = new Ext.tree.TreePanel({
        el: 't', //要有個div的id為't'
        width: 150,
        autoHeight: true,
        root: root
    });
    tree.render();
    tree.expandPath('/aRoot/2/3');
});

selectPath( String path, [String attr], [Function callback] ) : void
選擇特定路徑上的node,用法和expandPath相同。
Ext.onReady(function() {
    var root = new Ext.tree.AsyncTreeNode({
        id: 'aRoot',
        text: 'root',
        children: [
            {id: 1, text: 'A leaf Node', leaf: true},
            {id: 2, text: 'A folder Node', children: [
                {id: 3, text: 'A child Node', leaf: true}]
            }
        ]
    });
    var tree = new Ext.tree.TreePanel({
        el: 't', //要有個div的id為't'
        width: 150,
        autoHeight: true,
        root: root
    });
    tree.render();
    tree.selectPath('/aRoot/2/3');
});



除了上述的建構方式,Ext.tree.TreeLoader也提供透過URL讀取JSON file來建構tree。JSON file(tree.json)如下:
[{
    id: 1,
    text: 'A leaf Node',
    leaf: true
  },{
    id: 2,
    text: 'A folder Node',
    children: [{
      id: 3,
      text: 'A child Node',
      leaf: true
    }]
  }]

leaf屬性會在load的時候,判斷是否要在遞迴產生子節點。而原本的Ext.tree.TreeNode並不支援Ajax,所以也要改成Ext.tree.AsyncTreeNode.程式碼如下。
Ext.onReady(function() {
    var root = new Ext.tree.AsyncTreeNode({text: 'root'});
    var tree = new Ext.tree.TreePanel({
        el: 't',
        width: 150,
        autoHeight: true,
        root: root,
        loader: new Ext.tree.TreeLoader({dataUrl: 'tree.json'})
    });
    tree.render();
});


2009年8月3日 星期一

台中 - 日式料理 - 潤和壽司店 ☆☆☆


這家店位於台中縣沙鹿鎮一個不起眼的小路上,是一個偶然的機會到這家店消費,吃完之後發現這是一間物美價廉非常值得一吃的店家。
這是店裡的價目表,東西真的是物超所值,吃過握壽司與炒烏龍,強力推薦,還有每日一物也要點唷,超級划算。
我點的經濟餐,每一個握壽司都是滿滿的料,東西超好吃,最愛煙燻鮭魚,全部只要$200,如果人多或是食量大,建議點豪華餐。
今天的每日一物是鮭魚沙拉壽司,這兩個只要$10,不點可惜,保證物超所值。
味增湯,湯頭也是不錯,魚肉也是新鮮吃得到。
類別:日式料理 店名:潤和壽司店 地點:台中縣沙鹿鎮沙鹿鎮光華路371號 評論:☆☆☆ 物美價廉

熱門文章