Ext JS 6學習文檔-第6章-高級組件

Ext JS 6學習文檔-第6章-高級組件

高級組件

本章涵蓋了高級組件,好比 tree 和 data view。它將爲讀者呈現一個示例項目爲 圖片瀏覽器,它使用 tree 和 data view 組件。如下是本章將要討論的主題:css

  • Trees
  • Data views
  • 拖放
  • 圖片瀏覽器 — 一個示例項目

本章的主要目標是探索 tree panel 和 data view 而且使用他們來構建一個示例項目圖片瀏覽器。圖片瀏覽器的最終展現效果以下圖。node

這個項目中的最重要的組件是 tree panel 和 data view 。本項目中使用的組件和概念有:git

  • tree panel
  • Data views
  • Model
  • store 和 rest 代理
  • 容器和佈局
  • 引用
  • 事件處理
  • 過濾
 

除了 tree panel 和 data view 你已經在以前的章節中學習了全部的咱們目前已用到的知識。因此在本章中,咱們首先學習 tree panel 和 data view。github

1

 

tree panel

這在 ExtJS 中是一個很是強大且經常使用的組件,你能夠使用它構建任意類型的樹。一個 tree panel 是一個樹形結構的具備層次化數據的UI。json

它和 Ext.grid.Panel 類似, Ext.tree.Panel 也繼承自Ext.panel.Table 。因此,它也是支持多列的。bootstrap

和 grid panel 不一樣的是,tree panel 須要一個 tree store (Ext.Store.TreeStore)。 tree store 具備一些 tree panel 的功能所需使用的特殊的屬性。瀏覽器

 

基本的 tree

咱們來用一個簡單的例子演示。tree panel 至少須要一個 tree store 來提供數據。咱們首先來建立 tree store 並硬編碼內置數據:app

 

接着繼續建立 Ext.tree.Panel dom

 

下列截圖爲以上代碼的輸出結果:ide

1

如今,咱們建立一個高級點的樹,它是能夠拖拽的。同時還須要用到 tree panel 和 tree store 的一些額外選項。拖拽只須要添加一個插件叫作treeviewdragdrop 。如如下代碼所示:

 

 

如如下截圖所示的輸出。我把節點  South America 拖拽至  Asia 節點之下:

1

tree grid

你能夠將多個列添加到 tree ,同時也能建立 tree grid 。默認 tree 包含一列,用的是 tree store 中節點的文本字段。

在這個 store 中,你能夠看到在每一個節點上除了節點名稱,還添加了一些其餘的字段,這些字段用於在 tree panel 的列展現上。tree grid 的功能有例如 列調整,排序,過濾等等,如下是代碼:

 

如下的 grid 和上面的 tree panel 差很少同樣,只是添加爲多列了,這個 xtyp treecolumn 提供縮進和文件夾結構。像一個正常的 grid 同樣,tree grid 的列能夠是任意類型的例如 checkbox,picture,button,URL 等等。

默認列大小是可調整的,若是須要你也能夠固定它的寬度。看下面的代碼:

 

這是上面 Tree Grid 的輸出結果:

 1

 

Data views

Ext.view.View (xtype:dataview) 一個現實數據的自定義模板。你須要提供自定義的模板和數據源(store)。模板應該使用 Ext.XTemplate 。

data view 提供了內置的事件,例如 click,double-click,mouseover,mouseout,等等。

首先咱們建立一個簡單的 model 名爲 Person ,還須要建立一個 store 並持有 Person 的列表,如如下代碼所示:

 

而後咱們要來建立這個模板。下列模板使用 HTML 的 table 元素來呈現自定義格式的數據。

在模板中使用一個 model 的字段時,你能夠使用花括號包括字段名的方式來使用它,例如:{fieldname}

XTemplate 支持有條件的展示和 if 語句,如如下代碼所示:

 

看上面的例子,我使用了 awesome 字體圖標的樣式。你須要添加下列代碼到你的 HTML 文件才行:

 

一下代碼建立了一個 data view,而且它指定了使用的數據源 store ,template 和 itemSelector :

 

itemSelector 是一個必須的簡單 CSS 選擇器。這裏 itemSelector 是應用於在 template 中的 HTML ,就是使用 data-view 類的 div 標籤,最終根據這個模板,你在 data view 中選擇的每個 item ,就是這樣一個 div 標籤,設置了 itemSelector 屬性,data view 會知道如何處理這些節點,itemSelector 是用於將 DOM 節點映射到 records 。

你能夠監聽的事件例如 click ,double-click ,等等,以上代碼已經添加了監聽,下列是輸出結果:

 1

 

圖片瀏覽器 – 一個示例項目

慣例,咱們將用一個示例項目來回顧本章所學,下面是示例項目的最終設計效果:

1

經過查看這個設計,你會看到咱們使用的最重要的組件就是 tree panel 和 data view 。它們如何使用和一些概念已經在本章的前面部分說起。

 

咱們看看, 項目的目錄結構。

1

下列視圖代碼是本項目的重要部分。這個視圖呈現了應用中大部分可視組件。它使用 tree panle 和 data view :

 

 

控制器 ViewController 裏處理了 tree panel 的 itemdblclick 事件,只顯示所選擇節點下的圖片。

還有一個 upload 按鈕的 click 事件,這裏是未處理的。額,這是你的做業啦。看看下列代碼:

 

Model 和 Store 的代碼在這兒。

  • 注意:當你不指定 model 的字段類型時,將會自動猜想類型。

 

 

我是用的 Go 語言爲此項目寫的 REST API 。完整可用的代碼在這裏 https://github.com/ananddayalan/extjs-byexample-picture-explorer

圖片瀏覽器這個示例是一個很是簡單並用來學習 tree panel 和 data view 使用是很合適的。也能夠經過添加更多功能來改進這個例子。例如如何經過拖拽將圖片從一個相冊移動到另外一個相冊中。 會留給你做爲一個編碼的練習,但在這裏,我給你簡要的概述一下拖拽功能,這將幫助你在此項目中添加拖拽功能。

 

拖拽

任意元素或組件都能支持拖拽。使用拖拽有三個重要的事情:

  • 配置 item 爲可拖拽的Configure the items as draggable
  • 建立放置目標
  • 完成放置目標

 

配置 item 爲可拖拽的

想要拖拽一個 item ,你須要爲每個元素建立 Ext.dd.DD 實例。

查看下列代碼,經過建立 Ext.dd.DD 讓全部使用 pics 類的 div 元素成爲可拖拽的:

 

建立放置目標

使用 Ext.dd.DDTarget 建立放置容器。如下代碼爲全部的使用 album 類的 div 元素建立放置目標:

 

完成放置目標

當一個可拖拽項放置到一個放置容器,咱們須要從這個 item 的源位置將它移動到目標位置。這經過覆蓋 DD 的 onDragDrop 方法來實現。看一看下列代碼:

 

由於 DD 元素已是實例了,重寫的方法須要應用 Ext.apply(dd, overrides) ,如如下代碼所示:

 

總結

在本章中,你學習到如何使用拖拽功能。咱們也看了幾個高級組件:tree panel 和 data view。最後結合所學建立了一個示例項目。

相關文章
相關標籤/搜索