#javascript #iphone #xml #model-view-controller #titanium
#javascript #iPhone #xml #модель-представление-контроллер #titanium
Вопрос:
У меня есть 3 представления: v1.xml , v2.xml , v3.xml . v1.xml имеет кнопку B1. Когда пользователь нажимает кнопку B1, она открывается v2.xml . v2.xml имеет еще одну кнопку B2. Когда пользователь нажимает кнопку B2, она открывается v3.xml .
Я создал окно в v1.xml . Когда я нажимаю на кнопку B2, я хочу добавить view v3 в существующее окно, и я не хочу создавать новое окно. Я не могу использовать ссылку на окно, которую я создал в v1.xml поскольку я работаю в v2.xml файл сейчас же.
Мой код:
V1.xml
<Alloy>
<Window id="main_window">
<View id="v1">
<Button id="B1" />
</View>
</Window>
</Alloy>
V2.xml
<Alloy>
<View id="v2">
<Button id="B2" />
</View>
</Alloy>
V3.xml
<Alloy>
<View id="v3">
<Label id="l3" text="test label"/>
</View>
</Alloy>
V1.js
$b1.addEventListener('click', function() {
var view = Alloy.createController("V2").getView();
$.main_window.remove(v1);
$.main_window.add(view);
});
V2.js
$.b2.addEventListener('click', function(){
var view = Alloy.createController("V3").getView();
//Add this view to main_window
});
Комментарии:
1. в V1.js , попробуйте перейти
$.main_window.add(v2);
на$.main_window.add(view);
2. О да … это то, что у меня на самом деле было .. но это не решает мою проблему, хотя
3. Это вообще компиляция? Существует достаточное количество ошибок, которые не прошли бы этап предварительной компиляции Alloy.
Ответ №1:
- Вы должны передать ссылку на окно, созданное в версии V1, когда вы создаете контроллер версии V2:
V1.js
$b1.addEventListener('click', function() { var view = Alloy.createController("V2", { main_window: $.main_window }).getView(); $.main_window.remove(v1); $.main_window.add(view); });
V2.js
var args = arguments[0] || {}; var main_window = args.main_window; $.b2.addEventListener('click', function(){ var view = Alloy.createController("V3").getView(); main_window.add(view); });
- Или вы можете создать только один прослушиватель событий и передать его в качестве аргумента:
V1.js
var currentView; var replaceViews = function(view) { currentView amp;amp; $.main_window.remove(currentView); $.main_window.add(view); currentView = view; } $.b1.addEventListener('click', function() { var view = Alloy.createController('V2', { delegate: replaceViews }).getView(); replaceViews(view); });
V2.js
var args = arguments[0] || {}; var replaceViews = args.delegate; $.b2.addEventListener('click', function() { var view = Alloy.createController('V3').getView(); replaceViews(view); });
- Последним вариантом будет установка $.main_window в Alloy .Глобальные переменные и создание глобальной функции.
Здесь вы можете прочитать больше о передаче аргументов контроллеру Alloy и Alloy.Глобальные переменные.