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;