Appcelerator:多个子视图同步到最后一个回调
Appcelerator: Multiple Subviews Syncing to Last Callback
我正在创建一个带有背景图像、样式等的自定义菜单,因此我创建了一个单独的 menuTile 视图和控制器,并将背景、标题和回调发送给它。如果我使用 Require 标记添加多个 menuTiles,则所有图块都会触发最后一个 menuTile 的回调,而不是它们自己的回调。我确信我的代码中没有 bug/typo,所以这可能是对 Require 标记或回调的误解。请协助。
Menu.xml, Menu.js...
<View id="vwBody">
<Require src="menuTile" id="menuTile1" />
<Require src="menuTile" id="menuTile2" />
<Require src="menuTile" id="menuTile3" />
</View>
function initializeMenuTiles() {
$.menuTile1.initialize({
backgroundImage: 'img1.jpg',
title: 'Menu Tile 1',
callback: btnMenuTile1Click,
});
$.menuTile2.initialize({
backgroundImage: 'img2.jpg',
title: 'Menu Tile 2',
callback: btnMenuTile2Click,
});
$.menuTile3.initialize({
backgroundImage: 'img3.jpg',
title: 'Menu Tile 3',
callback: btnMenuTile3Click,
});
}
MenuTile.js...
$.initialize = function(args) {
$.btnMenuTile.backgroundImage = '/images/' + args.backgroundImage;
$.btnMenuTileLabel.text = args.title;
if (args.callback) {
btnMenuTileClicked_callback = args.callback;
}
};
function btnMenuTileClick() {
if (btnMenuTileClicked_callback) {
btnMenuTileClicked_callback();
}
}
所以无论我点击什么 menuTile,btnMenuTile3Click 都会触发。如果我不为 menuTile3 提供回调,那么 btnMenuTile2Click 将始终触发。
我没看到你在哪里定义 btnMenuTileClicked_callback 所以它将在模块的全局范围内,它在所有实例之间共享。
只需在 $.initialize...
行之前添加:
var btnMenuTileClicked_callback;
我正在创建一个带有背景图像、样式等的自定义菜单,因此我创建了一个单独的 menuTile 视图和控制器,并将背景、标题和回调发送给它。如果我使用 Require 标记添加多个 menuTiles,则所有图块都会触发最后一个 menuTile 的回调,而不是它们自己的回调。我确信我的代码中没有 bug/typo,所以这可能是对 Require 标记或回调的误解。请协助。
Menu.xml, Menu.js...
<View id="vwBody">
<Require src="menuTile" id="menuTile1" />
<Require src="menuTile" id="menuTile2" />
<Require src="menuTile" id="menuTile3" />
</View>
function initializeMenuTiles() {
$.menuTile1.initialize({
backgroundImage: 'img1.jpg',
title: 'Menu Tile 1',
callback: btnMenuTile1Click,
});
$.menuTile2.initialize({
backgroundImage: 'img2.jpg',
title: 'Menu Tile 2',
callback: btnMenuTile2Click,
});
$.menuTile3.initialize({
backgroundImage: 'img3.jpg',
title: 'Menu Tile 3',
callback: btnMenuTile3Click,
});
}
MenuTile.js...
$.initialize = function(args) {
$.btnMenuTile.backgroundImage = '/images/' + args.backgroundImage;
$.btnMenuTileLabel.text = args.title;
if (args.callback) {
btnMenuTileClicked_callback = args.callback;
}
};
function btnMenuTileClick() {
if (btnMenuTileClicked_callback) {
btnMenuTileClicked_callback();
}
}
所以无论我点击什么 menuTile,btnMenuTile3Click 都会触发。如果我不为 menuTile3 提供回调,那么 btnMenuTile2Click 将始终触发。
我没看到你在哪里定义 btnMenuTileClicked_callback 所以它将在模块的全局范围内,它在所有实例之间共享。
只需在 $.initialize...
行之前添加:
var btnMenuTileClicked_callback;