【问题标题】:Unable to get id from TableView in Appcelerator无法从 Appcelerator 中的 TableView 获取 id
【发布时间】:2017-11-01 12:21:19
【问题描述】:

我将一些 eventListener 附加到一些元素上,如下所示:

$.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>

为什么这不起作用?

【问题讨论】:

    标签: titanium appcelerator appcelerator-titanium appcelerator-alloy


    【解决方案1】:

    为了更清楚地告诉你为什么会发生这个错误,我们需要更多的 UI/XML 代码来了解 TableView 是如何与其他 UI 元素链接的。

    目前唯一的猜测是 TableView Row 的任何子元素也可以触发该单击事件。您还可以分享您在控制台上打印undefined的代码吗?

    除此之外,我在这里观察到一个不太有用的代码模式 - 你为什么使用 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) {
       // ..... 
    }
    

    这里的要点是,通过假设触发该事件的源视图的 ID 来运行代码并不是一个好主意,因为您的布局将来可能会更改,或者您可以重命名这些元素的 ID,或者可以是任何其他原因。

    【讨论】:

    • 同意 Prashant 提到的,另外补充一点,通过直接注册点击监听器来移除 id 到 action 的映射开销。
    • 谢谢,根据 Prashant 的建议更新了我的代码
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-20
    • 1970-01-01
    • 1970-01-01
    • 2021-05-16
    • 1970-01-01
    • 2011-08-23
    • 1970-01-01
    相关资源
    最近更新 更多