无法从Appcelerator中的TableView获取id

时间:2017-11-01 12:21:19

标签: titanium appcelerator appcelerator-titanium appcelerator-alloy

我将一些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>

为什么这不起作用?

1 个答案:

答案 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或者可以是任何其他原因。