Ext.select
選擇所有元素,並在當時靜態添加點擊處理程序。對於具有相同處理程序的新元素,它們必須在創建後添加到它們中。但是,這不是一個最佳方法。
在這種情況下使用事件委託會更好 - 爲您的容器元素添加一個單擊處理程序,然後基於被單擊的項目委派處理。這是更高效的(只需要一個事件處理程序)並且更加靈活。例如,如果您包含的元素有ID「畫廊-CT」它會像:
Ext.onReady(function() {
Ext.get('gallery-ct').on('click', function(e, t){
// t is the event target, i.e. the clicked item.
// test to see if it is an item of the type you want to handle
// (it is a DOM node so first convert to an Element)
t = Ext.get(t);
if(t.hasClass('gallery-item'){
// radioClass automatically adds a class to the Element
// and removes it from all siblings in one shot
t.radioClass('gallery-item-selected');
}
});
});
編輯:如果可能的點擊目標內嵌套的項目,你要採取一種(但不是太多)更高級的方法,並在點擊事件從點擊元素中冒出來時尋找目標(使用EventObject.getTarget)。如果您的目標位於事件鏈中,因爲它從點擊的el中冒出來,那麼您知道它仍然是有效的點擊。更新的代碼:
Ext.onReady(function() {
Ext.get('gallery-ct').on('click', function(e, t){
// disregard 't' in this case -- it could be a child element.
// instead check the event's getTarget method which will
// return a reference to any matching element within the range
// of bubbling (the second param is the range). the true param
// is to return a full Ext.Element instead of a DOM node
t = e.getTarget('.gallery-item', 3, true);
if(t){
// if t is non-null, you know a matching el was found
t.radioClass('gallery-item-selected');
}
});
});
非常感謝。經過一些小的調整後,我已經適應了我的需求。有一些我覺得很奇怪的行爲是,點擊gallery-item div內的圖片不會觸發gallery-item點擊事件。 – babadbee 2010-07-08 22:23:57
請參閱我的編輯。 – 2010-07-08 23:44:55