Аппселератор Titanium: передача ссылки в другие Windows

Я использую несколько оконных приложений, управляемых через Tabgroup. Я использую файлы .js для каждого окна, которые передаются как URL-адрес с каждым окном. У меня также есть файл function.js, в котором я пишу подпрограммы для многократно используемого кода, например, генерация формы или представление таблицы и т. д. Теперь я застрял в ситуации, когда мне нужно вызвать функцию, которая генерирует элемент формы, который находится в WindowA. В WindowA я явно определил все необходимые элементы формы. Теперь, что я передаю в своей подпрограмме функции, чтобы получить ссылку на уже созданный элемент формы.

Обратите внимание, что TableView создается в отдельном окне, скажем, WinB, и я генерирую строки, вызывая процедуру, написанную в functions.js. Я получаю неопределенную ошибку, несмотря на то, что переменные являются глобальными в WinA.

Как я могу получить ссылку на эти переменные во всем приложении?


person Volatil3    schedule 11.03.2012    source источник


Ответы (2)


Я настоятельно рекомендую НЕ использовать Ti.App для передачи переменных, даже если это работает. Это не лучшая практика. Я знаю, что вы этого не захотите, но потратьте время на рефакторинг своего кода, чтобы не использовать окна с URL-адресами - перейдите к подходу с одним экземпляром / commonJS.

См. https://wiki.appcelerator.org/display/guides/Mobile+Best+Practices и https://wiki.appcelerator.org/display/guides/CommonJS+Modules+in+Titanium

Также см. https://github.com/appcelerator-titans/App, чтобы узнать текущий код лучших практик.

Рефакторинг займет некоторое время, но ваше приложение будет намного стабильнее, а ваш код будет намного чище.

person Jeff Bonnes    schedule 11.03.2012

Прежде всего, вы можете объявить глобальную переменную, например. Ti.App объект. AFAIR, эта или подобная вещь не работала должным образом на iPhone.

Если это не сработает, есть хитрость с замыканием:

myVar = {field: 'some value'};
Ti.App.getMyGlobalVar = function() {
    return myVar;
}

Кроме того, я не уверен, будет ли работать Ti.App или какое-либо другое пространство имен. Прошло несколько месяцев, как я использовал апселератор Титаниум.

person kirilloid    schedule 11.03.2012