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

时间:2017-09-20 07:56:23

标签: appcelerator appcelerator-titanium appcelerator-alloy

我写了以下代码:

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)。

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

1 个答案:

答案 0 :(得分:3)

您遇到的 Titanium 问题,而不是您在此处所做的 JavaScript 编程错误,&此错误的解决方案称为 JavaScript's Function Hoisting

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

这就是 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
    }
}