Титан Appcelerator - передача переменных js - PullRequest
2 голосов
/ 13 июня 2011

Я новичок в JS и Appcelerator Titanium. Я пытаюсь внедрить модель MVC в мое приложение, но у меня проблема с доступом к данным в модели:

в model.js:

var my_val;

затем в file1.js я изменил значение my_val:

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

затем в другом файле file2.js:

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

почему file2.js не обнаруживает изменение file1.js, внесенное в my_val? Есть ли способ заставить его работать?

Ответы [ 3 ]

2 голосов
/ 13 июня 2011

посмотрите на мою публикацию в блоге об этой конкретной проблеме.

blog.clearlyinnovative.com

вы хотите включить оба файла в ваш app.js и добавить переменную в ваше пространство имен; это чище и не загрязняет глобальный охват.

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

в model.js сделать что-то вроде этого

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

в file2.js сделать что-то вроде этого; не нужно снова включать model.js, значение было установлено в вашем собственном пространстве имен и четко определено

Ti.API.info(myApp.model.my_val);
1 голос
/ 13 июня 2011

Если вы хотите получить эту функциональность, используйте Свойства титана , чтобы вы могли получить / установить переменную в соответствии с требованием. Сделайте что-то подобное в вашем app.js

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

Вы можете получить это значение в любом месте, как вы хотите:

var myValue = Titanium.App.Properties.getInt('my_value');
0 голосов
/ 13 июня 2011

Это потому, что утверждение

Ti.include('model.js'); 

просто сортирует и копирует код из вашего файла model.js в другие два файла. Все переменные в «model.js» будут доступны для файла, в который вы включили «model.js». Но это только означает, что копия переменной my_val становится доступной для file2.js, а не для переменной, которая является общей для всех файлов, имеющих строку Ti.include ('model.js')! Включение файла в другой аналогично вводу строк первого файла во второй, но ни в коем случае не связывает все файлы, содержащие общий файл! Так что, возможно, вместо

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

Вы можете попробовать это, увидев, что вы уже включили «model.js» в «file1.js ??»

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

ИЛИ вы всегда можете воспользоваться советом Мухаммеда Зеешана и проверить свойства Ti.App.Properties. Удачи! :)

...