#javascript #model-view-controller #scope #titanium #appcelerator
#javascript #модель-представление-контроллер #область видимости #titanium #appcelerator
Вопрос:
Я новичок в 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? Есть ли способ заставить это работать?
Ответ №1:
взгляните на мое сообщение в блоге, касающееся этой конкретной проблемы.
вы хотите включить оба файла в свой 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);
Ответ №2:
Если вы хотите реализовать эту функциональность, используйте Свойства Titanium, чтобы вы могли получить / установить свою переменную в соответствии с требованиями.Сделайте что-то подобное в своем 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');
Ответ №3:
Это потому, что утверждение
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 ‘in’file1.js ??’
Ti.include('file1.js');
Ti.API.info(my_val);
ИЛИ вы всегда можете последовать совету Мухаммеда Зишана и проверить Ti.App.Properties. Удачи! 🙂