一個UI前臺組件肯定會比較多,我們通常習慣性的使用ID來獲取需要操作的組件,但是這種方法是extjs推薦的么?有沒有extjs推薦使用的獲取組件的方法呢?
# 目錄
- [目錄](#)
- [extjs的查詢組件的API](#)
- [查詢實例](#)
- [基本的組件查詢](#)
- [組件樹查詢](#)
- [通過組件的屬性檢索](#)
- [屬性匹配操作符](#)
- [邏輯運算的](#)
- [官方案例](#)
### extjs的查詢組件的API
組件查詢API文檔地址:5.1.0-apidocs/#!/api/Ext.ComponentQuery-method-query
可以看到是使用的Ext.ComponentQuery這個單例的query方法來進行查詢的。
### 查詢實例
### 基本的組件查詢
1.
查詢xtype組件
~~~
prevField = myField.previousNode('textfield');
~~~
這表示查詢所有 textfield 以及繼承自TextField的組件都會被查詢。
~~~
prevTextField = myField.previousNode('textfield(true)');
~~~
這表示只查詢TextField類的,其他繼承類不用去查詢,只需要傳入true表示嚴格查詢即可。
1.
ID或者ItemID查找
#myContainer
當需要查詢ID定義的組件的時候,可以使用#來查詢。
1.
xtype和ID或者ItemID組合使用
~~~
panel#myPanel
~~~
這樣可以盡可能的減少ID帶來的沖突,對xtype進行了一次過濾。
### 組件樹查詢
看下面一個查詢實例:
~~~
window[title="Input form"] textfield[name=login] ^ form > button[action=submit]
~~~
語句從左到右執行,執行完成一個,就按照當前找到的那個再接著往下執行。所以這句話的意思是:
找到標題為Iput form的window的叫做login的textfield的父窗體中button的提交名稱為submit的那個按鈕。
### 通過組件的屬性檢索
上述例子就可以看到 當查詢title為Input form的window的時候就是使用的組件的屬性。
### 屬性匹配操作符
1. =
表示嚴格等于 。
1. ~=
表示只要搜索到檢索詞即可。
1. ^=
表示以什么什么 開頭
1. $=
表示以什么什么結尾的
1. /=
表示支持正則表達式的
### 邏輯運算的
1.
and邏輯
~~~
Ext.ComponentQuery.query('panel[cls~=my-cls][floating=true][title$="sales data"]');
~~~
這種類型的是表示邏輯and
1.
or邏輯
~~~
Ext.ComponentQuery.query('field[fieldLabel^=User], field[fieldLabel*=password]');
~~~
### 官方案例
~~~
// retrieve all Ext.Panels in the document by xtype
var panelsArray = Ext.ComponentQuery.query('panel');
// retrieve all Ext.Panels within the container with an id myCt
var panelsWithinmyCt = Ext.ComponentQuery.query('#myCt panel');
// retrieve all direct children which are Ext.Panels within myCt
var directChildPanel = Ext.ComponentQuery.query('#myCt > panel');
// retrieve all grids or trees
var gridsAndTrees = Ext.ComponentQuery.query('gridpanel, treepanel');
// Focus first Component
myFormPanel.child(':focusable').focus();
// Retrieve every odd text field in a form
myFormPanel.query('textfield:nth-child(odd)');
// Retrieve every even field in a form, excluding hidden fields
myFormPanel.query('field:not(hiddenfield):nth-child(even)');
~~~
- 前言
- [EXtJS5學習筆記]第一節 Sencha Cmd 學習筆記 簡介 Sencha Cmd是什么
- [ExtJS5學習筆記]第二節 Sencha Cmd 學習筆記 使你的sencha cmd跑起來
- [ExtJS5學習筆記]第三節 sencha cmd學習筆記 生成應用程序構建的內部細節
- [ExtJS5學習筆記]第四節 歡迎來到extjs5-手把手教你實現你的第一個應用
- [ExtJS5學習筆記]第五節 使用fontawesome給你的extjs5應用增加字體圖標
- [ExtJS5學習筆記]第六節 Extjs的類系統Class System命名規則及定義和調試
- [ExtJS5學習筆記]第七節 Extjs5的組件components及其模板事件方法學習
- [ExtJS5學習筆記]第八節 Extjs5的Ext.toolbar.Toolbar工具條組件及其應用
- [ExtJS5學習筆記]第九節 Extjs5的mvc與mvvm框架結構簡介
- [ExtJS5學習筆記]第十節 Extjs5新增特性之ViewModel和DataBinding
- [ExtJS5學習筆記]第十一節 Extjs5MVVM模式下系統登錄實例
- [ExtJS5學習筆記]第十二節 Extjs5開發遇到的問題列表記錄
- [ExtJS5學習筆記]第十三節 Extjs5的Ext.each方法學習
- [ExtJS5學習筆記]第十四節 Extjs5中data數據源store和datapanel學習
- [ExtJS5學習筆記]第十五節 Extjs5表格顯示不友好?panel的frame屬性在作怪
- [ExtJS5學習筆記]第十六節 Extjs5使用panel新增的ViewModel屬性綁定數據
- [ExtJS5學習筆記]第十七節 Extjs5的panel組件增加accodion成為折疊導航欄
- [ExtJS5學習筆記]第十八節 Extjs5的panel的dockeditems屬性配置toolbar
- [ExtJS5學習筆記]第十九節 Extjs5中通過設置form.Panel的FieldSet集合屬性控制多個field集合
- [ExtJS5學習筆記]第二十節 Extjs5配合數組的push方法,動態創建并加載組件
- [ExtJS5學習筆記]第二十一節 Extjs5中使用config配置給ext.widget或者create方法傳遞參數
- [ExtJS5學習筆記]第二十二節 Extjs5中使用beforeLabelTpl配置給標簽增加必填選項星號標志
- [ExtJS5學習筆記]第二十三節 Extjs5中表格gridpanel的列格式設置
- [ExtJS5學習筆記]第二十四節 Extjs5中表格gridpanel或者表單數據后臺傳輸remoteFilter設置
- [ExtJS5學習筆記]第二十五節 利用window.open()函數實現ExtJS5的登陸頁面跳轉
- [EXTJS5學習筆記]第二十六節 在eclipse/myeclipse中使用sencha extjs的插件
- [ExtJS5學習筆記]第二十七節 CMD打包錯誤 Error C2009: YUI Parse Error (identifier is a reserved word => debugger;)
- [ExtJS5學習筆記]第二十八節 sencha ext js 5.1.0發布版本正式發布 extjs doc下載地址
- [ExtJS5學習筆記]第二十九節 sencha ext js 5.1.0中動態更換皮膚主題
- [ExtJS5學習筆記]第三十節 sencha extjs 5表格gridpanel分組匯總
- [ExtJS5學習筆記]第三十一節 sencha extjs 5使用cmd生成的工程部署到tomcat服務器
- [ExtJS5學習筆記]第三十二節 sencha extjs 5與struts2的ajax交互配置
- [ExtJS5學習筆記]第三十五節 sencha extjs 5 組件查詢方法總結