0

在我的应用程序中,Ti.App.addEventListener 执行了多次,甚至 fireEvent 调用了一次。
我无法删除 fireEvent。如何删除创建的 fireEvent。

这是我的示例文件:

选择用户.xml

Alloy>
    <NavigationWindow id="selectUserNav" platform="ios">
        <Window id="selectUserWin">
             <Label id="selectUserLabel"/>
             <Label id="userName"/>
        </Window>
    </NavigationWindow>
</Alloy>

选择用户.js

var selectedUser = '';
function  displaySelectedUser(){
    $.selectUserLabel.setText('Select the user');
    $.userName.setText(selectedUser);
}
displaySelectedUser();

$.selectUserWin.addEventListener('open', function() {
    var titleLabel = Ti.UI.createLabel({
        text : 'Select User',

    });
    $.selectUserWin.setTitleControl(titleLabel);
    var leftView = Ti.UI.createView({
    });
    var leftButton = Titanium.UI.createButton({
        backgroundImage : '/left_arrow.png'
    });
    leftView.add(leftButton);
    $.selectUserWin.setLeftNavButton(leftView);
    var rightView = Ti.UI.createView({
    });
    var rightButton = Titanium.UI.createButton({
        backgroundImage : '/right_arrow.png'
    });
    rightView.add(rightButton);
    $.selectUserWin.setRightNavButton(rightView);

    leftButton.addEventListener('click', function(e) {
        $.selectUserNav.close();
    });
    rightButton.addEventListener('click', function(e) {

            Alloy.createController('usersList').getView().open();   
    });
});

Ti.App.addEventListener('username', function(data) {

    Ti.API.info('### selectedUser: '+ data.selectedUserName);
    selectedUser = data.selectedUserName;
    displaySelectedUser();

});

用户列表.xml

Alloy>
    <NavigationWindow id="usersListNav" platform="ios">
        <Window id="usersListWin">
            <TableView id="usersDispTable"></TableView>
        </Window>
    </NavigationWindow>
</Alloy>

用户列表.js

 var usersTableData = [];
    function userList(){
        for ( i = 0; i < 5; i++) {

                var titleLabel1 = Titanium.UI.createLabel({
                    text :  'srinivas', 
                });
                var userListRow = Ti.UI.createTableViewRow({
                        userName : 'srinivas',
                        height : '40',
                });
                userListRow.add(titleLabel1);
                usersTableData.push(userListRow);

                userListRow.addEventListener('click', function(e) {
                    var selectedArgs = {
                        selectedUserName : e.rowData.userName
                    };
                     Ti.App.fireEvent('username', selectedArgs);
                     $.usersListNav.close();
                });

        }
$.usersDispTable.setData(usersTableData);

    }
    userList();
    $.usersListWin.addEventListener('open', function() {
        var titleLabel = Ti.UI.createLabel({
            text : 'Users List',

        });
        $.usersListWin.setTitleControl(titleLabel);
        var leftView = Ti.UI.createView({
        });
        var leftButton = Titanium.UI.createButton({
            backgroundImage : '/left_arrow.png'
        });
        leftView.add(leftButton);
        $.usersListWin.setLeftNavButton(leftView);

        leftButton.addEventListener('click', function(e) {
            $.usersListNav.close();
        });

    });
4

1 回答 1

2

抱歉,但我会间接回答您的问题,因为您尝试做的事情效率不高。

您需要做的是在下面听您TableViewTableViewRow喜欢的示例:

$.usersDispTable.addEventListener('click',function(e){
    Ti.App.fireEvent('username', e.rowData.username);
}

顺便说一句,如果你需要删除一个EventLister你可以这样做:

window.addEventListener('click', function foo(e) {
    window.removeEventListener('click', foo);
    [...]
}

--已编辑(回答评论)

EventListener Ti.App.addEventListener那是因为您每次都在创建一个 GlobalselectUser被调用。

一种可能的选择是将event侦听器绑定到 userList 创建,例如:

[...]
var userList = Alloy.createController('usersList').getView();
userList.addEventListener('username',function setUsername(username){
    userList.removeEventListener('username',setUsername);
    Ti.API.info('### selectedUser: '+ data.selectedUserName);
    selectedUser = data.selectedUserName;
    displaySelectedUser();
});
userList.open();
[...]
于 2016-02-19T22:11:26.383 回答