0
votes

I have written the following code:

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

    function closeDialog() {
        // Android logic
    }
}

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

    function closeDialog() {
        // iOS logic
    }
}

For some reason when I run on Android it executes the code for iOS. So when I had a look at the generated files in the resources directory I see that generated code just removes the if (OS_ANDROID) and if (OS_IOS) blocks and leaves both codes (iOS and Android) on the file.

Currently I'm running on the emulators, but I'm guessing it should work just the same.

1

1 Answers

3
votes

It's not Titanium issue you are running into, rather it's a JavaScript programming error you are doing here, & solution to this error is called as JavaScript's Function Hoisting

You cannot just simply declare functions inside if-else conditions because if-else is a block & blocks do not contain function declarations.

That's why Titanium resources files are showing both methods because methods are not allowed to be declared inside if-else, and if you do, then they will be considered as in global scope or more accurately in the parent scope of if-else.

So, you can make your code work like this:

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
    }
}