gpt4 book ai didi

ios - 无法限制 Ti.App.fireEvent 执行多次

转载 作者:行者123 更新时间:2023-11-28 21:32:07 26 4
gpt4 key购买 nike

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

这是我的示例文件:

selectUser.xml

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

selectUser.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();

});

usersList.xml

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

usersList.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();
});

});

最佳答案

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

你需要做的是听你的 TableView 而不是你的 TableViewRow 就像下面的例子:

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

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

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

--已编辑(回复评论)

那是因为每次调用 selectUser 时,您都会创建一个全局 EventListener Ti.App.addEventListener

一个可能的选择是将 event 监听器绑定(bind)到 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();
[...]

关于ios - 无法限制 Ti.App.fireEvent 执行多次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35512810/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com