我的ListView
有点像这样:
<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
答案 0 :(得分:2)
我相信你可以通过使用element触发的事件的源id来实现这一点。由于事件被冒泡到父层次结构,因此您唯一需要注意的事项是,所以任何子视图也可以调用click事件来为您提供意外的源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>
这里的问题是,首先你要在 View(带有id =包装)的标签上设置 touchEnabled ='false' ,它将确保Label不会触发click事件,并且会冒泡并放大仅由父母解雇。
接下来就是,在点击事件方法中,您正在使用 e.source ,它现在是您的包装器视图。
如果您未在标签上设置 touchEnabled = false ,则 e.source < / strong>还可以包含标签参考。您可以阅读有关事件冒泡的更多信息,这将有助于您了解如何有效地使用Titanium中的事件处理。
答案 1 :(得分:1)
我会在对象上放置一个属性并使用它来确定状态。例如, 单击按钮后设置变量,然后在长时间运行的异步功能后更改它...这样,如果状态正在运行,则忽略单击。一旦它不再运行,则接受点击。