mim
mim

Reputation: 21

Appcelerator titanium - passing js variables

I am new to JS and Appcelerator titanium. I am trying to implement the MVC model to my app, but I have a problem accessing the data in the model:

in the model.js:

var my_val;

then in file1.js, I modified the value of my_val:

Ti.include("model.js");
my_val=5;

then in another file file2.js:

Ti.include("model.js");
T.API.info(my_val); // the value I always get is "undefined"

why is file2.js not detecting the change file1.js has done to my_val? Is there anyway to make it work?

Upvotes: 2

Views: 5349

Answers (3)

Aaron Saunders
Aaron Saunders

Reputation: 33335

take a look at my blog posting regarding this particular problem.

blog.clearlyinnovative.com

you want to include both files in your app.js and add the variable to your namespace; this is cleaner and doesn't pollute the global scope.

var myApp = {};
Ti.include("model.js");
Ti.include("file2.js");

in model.js do something like this

var myApp.model = {};
myApp.model.my_val = 100;

in file2.js do something like this; no need to incude model.js again, the value was set in your own namespace and is clearly defined

Ti.API.info(myApp.model.my_val);

Upvotes: 2

dragonfly
dragonfly

Reputation: 411

This is because what the statement

Ti.include('model.js'); 

does is to just sort of 'copy-paste' the code in your 'model.js' file into the other two files. All the variables in 'model.js' will be available to the file in which you included 'model.js'. But this only means that a copy of the variable my_val is made available to 'file2.js' not a variable that is common to all files that have the Ti.include('model.js') line!Including a file in another is pretty much the same as typing out the lines of the first file into the second but it in no way connects all files that include a common file! So maybe instead of

Ti.include('model.js');
Ti.API.info(my_val);

you can this try this seeing as you have already included 'model.js' in 'file1.js??'

Ti.include('file1.js');
Ti.API.info(my_val); 

OR you can always go with Muhammad Zeeshan's advice and check out Ti.App.Properties. Good Luck! :)

Upvotes: 0

Muhammad Zeeshan
Muhammad Zeeshan

Reputation: 8856

If you want to get this functionality done use Titanium Properties so that you can get/set your variable as per requirement.Do something like this in your app.js

// initialize your variable, you can update it as well with your custom value
Titanium.App.Properties.setInt('my_value', 0);

You can get this value any where you want like this:

var myValue = Titanium.App.Properties.getInt('my_value');

Upvotes: 1

Related Questions