我将一些eventListeners附加到许多元素,如:
$.someButton.addEventListener('click', function(evt) { eventHandling(evt); });
$.someImageView.addEventListener('click', function(evt) { eventHandling(evt); });
$.someWindow.addEventListener('click', function(evt) { eventHandling(evt); });
$.someTableView.addEventListener('click', function(evt) { eventHandling(evt); });
然后,我这样抓住他们:
function eventHandling(evt) {
switch (evt.source.id) {
case "someButton":
console.log("button clicked");
break;
case "someImageView":
console.log("imageview clicked");
break;
case "someWindow":
console.log("window clicked");
break;
case "someTableView":
console.log("tableview clicked");
break;
};
};
他们都记录了他们的id,除了记录 undefined 的TableView。 TableView设置如下(最小化):
<Alloy>
<View id="main">
<TableView bottom="100" zIndex="0" id="someTableView" dataCollection="inspection" dataFilter="statusFilter">
...
</TableView>
</View>
</Alloy>
为什么这不起作用?
答案 0 :(得分:3)
为了更清楚地告诉你这个错误发生的原因,我们需要更多的UI / XML代码来了解TableView如何与其他UI元素链接。
现在唯一的猜测是任何TableView Row的子元素也可以触发该click事件。您是否也可以共享您在控制台上未定义打印的代码?
除此之外,我在这里观察到一个不太有用的代码模式 - 为什么使用 switch 语句只是为了知道被点击元素的id?
我更愿意使用下面的代码而不是上面的代码。
$.someButton.addEventListener('click', buttonClick);
$.someImageView.addEventListener('click', imageViewClick);
$.someWindow.addEventListener('click', windowClick);
$.someTableView.addEventListener('click', tableClick);
function buttonClick(e) {
// .....
}
function windowClick(e) {
// .....
}
function imageViewClick(e) {
// .....
}
function tableClick(e) {
// .....
}
这里的要点是通过假设触发该事件的source-view的id运行代码不是一个好主意,因为您的布局将来可能会更改,或者您可以重命名这些元素的ID或者可以是任何其他原因。