Appcelerator Alloy 忽略特定于平台的代码

Appcelerator Alloy ignores platform specific code

我写了下面的代码:

if (OS_ANDROID) {
    function showDialog() {
        // Android logic
    }

    function closeDialog() {
        // Android logic
    }
}

if (OS_IOS) {
    function showDialog() {
        // iOS logic
    }

    function closeDialog() {
        // iOS logic
    }
}

出于某种原因,当我在 Android 上 运行 时,它会执行 iOS 的代码。因此,当我查看资源目录中生成的文件时,我看到生成的代码只是删除了 if (OS_ANDROID)if (OS_IOS) 块并保留了两个代码(iOS 和 Android ) 在文件上。

目前我运行正在使用模拟器,但我猜它应该可以正常工作。

您 运行 不是 Titanium 问题,而是 JavaScript 编程错误在这里做,&这个错误的解决方案被称为JavaScript's Function Hoisting

您不能简单地在 if-else 条件中声明函数,因为 if-else 是一个 block & 不包含函数声明。

这就是 Titanium 资源文件显示这两种方法的原因,因为不允许在 if-else 中声明方法,如果您做,那么它们将被视为在全局范围内或更准确地在 if-else.

的父范围内

所以,你可以让你的代码像这样工作:

function showDialog() {
    if (OS_IOS) {
       // ios logic

    } else if (OS_ANDROID) {
       // android logic
    }
}

function closeDialog() {
    if (OS_IOS) {
       // ios logic

    } else if (OS_ANDROID) {
       // android logic
    }
}