原文地址:[http://www.sencha.com/blog/top-support-tips-december-2013?mkt_tok=3RkMMJWWfF9wsRolu63MZKXonjHpfsX57uwtUae2i4kz2EFye%2BLIHETpodcMTcNnMa%2BTFAwTG5toziV8R7PCKM1338YQWhPj](http://www.sencha.com/blog/top-support-tips-december-2013?mkt_tok=3RkMMJWWfF9wsRolu63MZKXonjHpfsX57uwtUae2i4kz2EFye%2BLIHETpodcMTcNnMa%2BTFAwTG5toziV8R7PCKM1338YQWhPj)
作者:**Sencha Support Team**
### Seth Lemmons:充分利用TaskRunner
有時候,重用正在運行的可以啟動和暫停的的任務非常有用。相當幸運,在Ext JS中實現可重用的任務相當容易。Ext.util.TaskManager 是一個單例模式(singleton)的類,它的start方法可以通過傳遞的配置自動創建任務。或者,也可以創建自己的任務實例。任務會保持一個內部運行的根據間隔時間自動增長的計數器,且可在每次調用start方法進行重置。可以為任務定義一個在任務停止(或取決于如何緩存進度的暫停)時調用的onStop函數。使用fireOnStart配置項可以用來判斷任務在調用start方法或在第一次時間間隔過后run函數是否執行正確。
這里有一個創建計時器并允許用戶啟動和暫停它的示例。任務的進度被緩存它的值屬性指向的counter組件中。現在,每當調用stop方法就像暫停這個用例。
可以在[https://fiddle.sencha.com/#fiddle/1ca](https://fiddle.sencha.com/#fiddle/1ca)來查看它的行為。
如果想閱讀更多有關任務間隔(Taskk Intervals)的文檔,可參閱[http://docs.sencha.com/extjs/4.2.2/#!/api/Ext.util.TaskRunner](http://docs.sencha.com/extjs/4.2.2/#!/api/Ext.util.TaskRunner)。
### Mitchell Simoens:Sencha Touch中的事件委托
你知道嗎,即使沒有在MVC應用程序中使用控制器,容器也可以監聽子組件的事件?有兩種方法可以實現這個:
~~~
Ext.Viewport.add({
layout : {
type : 'card',
animation : 'slide'
},
items : [
{
html : 'Card One',
items : [
{
xtype : 'button',
ui : 'forward',
text : 'View Details'
}
]
}
],
listeners : {
delegate : 'button[ui=forward]',
tap : function(button, e) {
this.setActiveItem({
html : 'Details are here!'
});
}
}
});
~~~
在上面的示例中,在容器中使用了卡片布局。第一張卡片中包含一個子按鈕,預期的效果是通過子按鈕的tap事件在頂層容器顯示詳細視圖。不過,由于未來可能將按鈕移動到工具欄上,所以不希望直接在這里監聽按鈕的事件。為了做成防護措施,在這里可以在頂層容器添加監聽并采用委托事件來實現,而它的目標就是按鈕的ui屬性值forward。配置項delegate會使用到ComponentQuery的選擇符,選擇符可以是簡單的,也可以時候復雜的,看你需要。但我的建議是盡量保持簡單。
這個示例的演示可以瀏覽https://fiddle.sencha.com/#fiddle/1f9。
如果是使用Ext.define自定義的組件,可以使用control配置項,就像在控制器中一樣,代碼如下:
~~~
Ext.define('MyContainer', {
extend : 'Ext.Container',
xtype : 'mycontainer',
config : {
layout : {
type : 'card',
animation : 'slide'
},
items : [
{
html : 'Card One',
items : [
{
xtype : 'button',
ui : 'forward',
text : 'View Details'
}
]
}
],
control : {
'button[ui=forward]' : {
tap : 'onButtonTap'
}
}
},
onButtonTap : function(button, e) {
this.setActiveItem({
html : 'Details are here!'
});
}
});
Ext.Viewport.add({
xtype : 'mycontainer'
});
~~~
和第一個示例一樣,在control配置項中,使用了按鈕的ui屬性值forward來切換詳細視圖。要注意的是,tap事件映射的onButtonTap方法是在頂層的MyContainer組件中定義的。當要實現將子組件的事件定義在容器這種方法,就可是有control配置項。不過,要記住盡可能使用簡單的選擇符。
本示例的演示可以訪問[https://fiddle.sencha.com/#fiddle/1fa](https://fiddle.sencha.com/#fiddle/1fa)。
如果有一個錨鏈標記(<a>),且需要捕獲tap事件并阻止它進入對應的鏈接,可以類似第一個示例,使用delegate配置項來實現,不過要告訴監聽,這是元素監聽,代碼如下:
~~~
Ext.Viewport.add({
html : '<div>You can capture tap event on this <a href="#" class="tappable">link</a> in your components</div>',
listeners : {
element : 'element',
delegate : 'div a.tappable',
tap : function(e, t) {
e.stopEvent();
Ext.Viewport.removeAll();
Ext.Viewport.setHtml('You tapped it!');
}
}
});
~~~
可以使用element配置項來告訴監聽現在監聽的是基于組件元素的事件,且使用delegate配置項來為tap事件監聽特定元素。在這里,delegate配置項使用了DOM選擇符,選擇符可以使用所需的任何選擇符,但我建議盡可能的保持簡單。要注意的是,在瀏覽器上,如Google Chrome,將不會停止事件,不過在移動設備上,它會正常工作。
這個例子的演示可以訪問[ https://fiddle.sencha.com/#fiddle/1fb](https://fiddle.sencha.com/#fiddle/1fb)。
### Greg Barry:在Sencha Cmd 中隱藏Gems
Sencha Cmd嚴重依賴于一組已知的有關你的環境變量和應用程序的內部屬性。這些屬性包括軟件路徑、系統設置和Sencha軟件版本。
在命令行中,只要在項目根目錄中輸入以下命令就可以查看和使用這些信息:
~~~
sencha diag show
~~~
通過命令行或自定義ANT腳本都就可以查看所有這些屬性。
還可以很容易的查看到一些屬性的設置位置。通常可以根據命名空間來確定屬性的源,例如:
- app. — 查看"app.json"和".sencha/app/sencha.cfg"
- workspace. — 查看"workspace.json"和".sencha/workspace/sencha.cfg"
- framework. — 在Ext JS或Sencha Touch的SDK中查看"cmd/sencha.cfg"
- cmd. — 在Sencha Cmd安裝目錄中查看"sencha.cfg"
想了解更多有關將這些屬性繼承到自定義腳本的信息,可參閱:[ http://docs.sencha.com/extjs/4.2.2/#!/guide/command_advanced](http://docs.sencha.com/extjs/4.2.2/#!/guide/command_advanced)
- 前言
- extjs 4 tree 的text不顯示
- 窗口顯示時讓字段獲得焦點
- 如何編寫一個使用Store更新復選框的CheckboxGroup的插件
- 如何了解事件中回調函數的參數
- 很多人需要的,帶時間的日期選擇器
- 一個網上找到的,在Grid中嵌套Grid的示例:Nested Grids Example
- 修改Ext.ux.GroupTabPanel讓它支持延遲渲染
- 初學者比較容易犯的布局錯誤(手風琴布局)
- Ext JS添加子組件的誤區
- 使用Ext JS,不要使用頁面做組件重用,盡量不要做頁面跳轉
- 【翻譯】十大要避免的Ext JS開發方法
- 一個不錯的擴展:Ext.ux.container.ButtonSegment
- 在VS2012中實現Ext JS的智能提示太簡單了
- 為什么要使用“var me=this”這樣的寫法
- 一個很不錯的支持Ext JS 4的上傳按鈕
- 【翻譯】熱門支持小提示:2013年12月
- 【翻譯】在Ext JS應用程序中使用自定義圖標
- 演練Ext JS 4.2自定義主題
- 【翻譯】培訓提示:解決常見編碼問題的簡單技巧
- 【翻譯】從Store生成Checkbox Group
- 【翻譯】將Ext JS Grid轉換為Excel表格
- 【翻譯】Ext JS 5:為不同設備設置不同的主題