Search code examples
titaniumtitanium-alloy

Variable scope for titanium alloy


I would like to know how the variable scope works when Ti.include.

I made application on titanium 2.*

var x = '12'

Ti.include('lib.js');

in lib.js

Ti.API.info(x) //it shows 12

However, now I am transferring this code into alloy

in app/controllers/index.js

var x = '12'

Ti.include('/mylib/lib.js');

in app/ssets/mylib/lib.js

app/ssets/mylib/lib.js // it says can't find variable x.

How can I make the global variable which is available in both file??


Solution

  • If you need to assign global variable you can use Alloy.Globals object:

    Alloy.Globals.myVar = 12;
    

    Also instead of using Ti.include, it's much better to use require(); and convert your code to CommonJS module, so you will be able set which variable and functions you want to export:

    /app/lib/util.js:

    var privateValue = 'foo';
    
    var publicValue = 'bar';
    
    function getValues() {
        return [privateValue, publicValue];
    }
    
    module.exports = {
        publicValue: publicValue,
        getValues: getValues,
    };
    

    /app/controllers/index.js:

    var util = require('/util');
    
    Ti.App.info(util.privateValue); // undefined
    Ti.App.info(util.publicValue); // 'bar'
    
    util.publicValue = 'foobar';
    
    Ti.App.info(util.getValues()); // [ 'foo', 'foobar' ];