2014-02-19 4 views
1

Рамка настроена так, что вы можете одновременно загружать несколько представлений (и предположительно связанных с ними контроллеров), но мне трудно писать правильный код контроллера, который «знает», где все.

Документация Titanium описывает использование в «$», как так:

Всех элементов пользовательского интерфейса, которые имеют идентификатор атрибут в представлении автоматически определяется и доступен как свойства префикса специальных переменными $ в контроллере , Значение $ является ссылкой на контроллер. ... Чтобы получить доступ к внешним контроллерам и представлениям, используйте методы Alloy.createController и Controller.getView, соответственно.

В документе Titanium также говорится, что в целом представления и контроллеры работают парами.

Предположим, у меня есть определенный вид, который содержит кнопку «назад», а другой вид - кнопка обновления. Дело в том, что эти представления содержат связанные контроллеры, которые должны работать независимо от того, в каком контексте я вхожу. Кнопка «Назад» должна всегда закрывать окно верхнего уровня, а кнопка обновления должна перезагружать данные основного вида, независимо от того, «Я смотрю.

Поэтому я создаю мастер-представление и загружаю в него эти два вида. Теперь у меня есть 3 View-Controllers, работающих вместе в одном контексте. Логика требует, чтобы кнопка «назад» знала, как закрыть своего родителя или даже делать дополнительные вещи в зависимости от того, откуда вы «возвращаетесь»; кнопка обновления, очевидно, должна знать, как получить доступ к данным родительского представления. Как я могу использовать '$' для кодирования, если я всегда ограничиваюсь одним контроллером? Для меня не имеет смысла, что я загружаю «внешние» контроллеры или представления, когда все 3 сущности работают в одном и том же месте.

+1

$ это просто хороший ярлык для кодирования. Ваша проблема кажется немного более сложной. Не могли бы вы привести пример кода, показывающий, что вы пытаетесь сделать с вашими контроллерами и представлениями? – daniula

+0

Спасибо, daniula. Это всего лишь общий вопрос, а не мой код. Наверное, я просто спрашиваю, какой общий подход мог бы сделать опытный разработчик сплавов. Если бы они просто не использовали $, это было бы достаточно для меня. – Brad

+1

Я использую $ в каждом контроллере. Он позволяет получить доступ к вашим представлениям по их имени и экспортировать общедоступные методы, которые могут быть вызваны другим контроллером. – daniula

ответ

1

Вот пример того, как вы можете использовать $ между различными контроллерами Alloy.

index.js:

$.open.addEventListener('click', function() { 
    var view = Alloy.createController(view, { title: 'First Title' }); 
    view.setTitle('Second Title'); 
}); 

$.index.open(); 

view.js:

var args = arguments[0] || {}; 

$.setTitle = function(title) { 
    $.title.text = title; 
}; 

if (args.title) { 
    $.setTitle(args.title); 
} 

Конечно я предполагаю, что index.xml и view.xml существует и это похоже на:

индекс .xml:

<Alloy> 
    <Window> 
     <Button id="open" title="Open New Window" /> 
    </Window> 
</Alloy> 

вид. xml:

<Alloy> 
    <Window> 
     <Label id="title">Empty Title</Label> 
    </Window> 
</Alloy> 
Смежные вопросы