0

刪除事件偵聽器,我有一個ListView有點像這樣:鈦/鋁合金/ Appclerator:從列表項

<ListView> 
    <Templates> 
     <ItemTemplate name="example"> 
      <View id="wrapper" onClick="onClickExampleButton"> 
       <Label>Click Me</Label> 
      </View> 
     </ItemTemplate> 
    </Templates> 

    <ListSection id="ls"> 
     <ListItem template="example"></ListItem> 
     <ListItem template="example"></ListItem> 
     <ListItem template="example"></ListItem> 
    </ListSection> 
</ListView> 

我想,以防止對onClickExampleButton功能雙擊。

所以在控制器到目前爲止,我有這樣的代碼:

function onClickExampleButton(e) { 
    var item = $.ls.getItemAt(e.itemIndex); 
    // TODO: I want to disable the onClick eventListener here 

    someLongAsyncFuncToServer(function() { 
     // TODO: I want to re-enable the onClick eventListener here 
    }) 
} 

通常刪除事件偵聽器很簡單,只要

$.objId.removeEventListener(onClickExampleButton) 

並重新添加它很簡單,只要:

$.objId.addEventListener(onClickExampleButton) 

但是,我不知道如何實現這個ListItem

回答

1

我會把一個屬性的對象,並用它來確定狀態。例如, 設置一個變量,當你點擊按鈕,然後在長時間運行異步函數後改變它...這樣,如果狀態正在運行,那麼忽略點擊。一旦它不再運行,然後接受點擊。

2

我相信你可以通過使用元素觸發的事件的源ID來實現這一點。因爲事件會冒泡到父層次結構中,所以您需要關注這一點,因此任何子視圖都可以調用單擊事件,從而爲您提供意外的源代碼ID。

要解決您的查詢,你可以放心地使用此代碼:

function onClickExampleButton(e) { 
    var item = $.ls.getItemAt(e.itemIndex); 

    // TODO: I want to disable the onClick eventListener here 
    e.source.touchEnabled = false; 

    someLongAsyncFuncToServer(function() { 
     // TODO: I want to re-enable the onClick eventListener here 
     e.source.touchEnabled = true; 
    }) 
} 

,並在你的XML代碼這樣的小變化:

<ListView> 
    <Templates> 
     <ItemTemplate name="example"> 
      <View id="wrapper" onClick="onClickExampleButton"> 
       <Label touchEnabled="false">Click Me</Label> 
      </View> 
     </ItemTemplate> 
    </Templates> 

    <ListSection id="ls"> 
     <ListItem template="example"></ListItem> 
     <ListItem template="example"></ListItem> 
     <ListItem template="example"></ListItem> 
    </ListSection> 
</ListView> 

這裏的前提條件是:第一,所有的你設置了touchEnabled ='false'標籤裏面查看(帶id = wrapper),它會確保點擊事件不會被La bel,並且將會冒泡&僅由父母開除。

接下來的事情是,在點擊事件的方法,使用的是e.source這就是您的包裝查看。

如果不設置touchEnabled =假標籤,然後e.source還可以包含標籤參考。您可以閱讀有關事件冒泡的更多信息,這將有助於您瞭解如何有效地處理Titanium中的事件處理。