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
}
}
我写了下面的代码:
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
}
}