【问题标题】:Appcelerator Alloy ignores platform specific codeAppcelerator Alloy 忽略平台特定代码
【发布时间】:2017-09-20 07:56:23
【问题描述】:

我写了以下代码:

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)都保留在文件中。

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

【问题讨论】:

    标签: appcelerator appcelerator-titanium appcelerator-alloy


    【解决方案1】:

    您遇到的不是 Titanium 问题,而是您在此处执行的 JavaScript 编程错误,此错误的解决方案称为 @987654321 @

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-14
      相关资源
      最近更新 更多