Как найти вид с идентификатором

Попытка создать простое приложение с фреймворком rikulo и задать вопрос:

  • Можно ли найти View внутри иерархического макета? и как? (в дротике)

    На сайте Rikulo есть некоторая документация по IdSpace, но я не совсем понял, как ее использовать. Должен ли я продлить View с IdSpace? Или же View будет автоматически генерировать идентификатор?

Обновить (добавить пример кода)

/*
* Function will actualy build View
*/
void _buildUi(Element tagElement)
{
   View mainView = new View();
   mainView.profile.width = '100%';
   mainView.profile.height = '100%';
   mainView.layout.type = 'linear';
   mainView.layout.orient = 'vertical';
   mainView.style.cssText = "background: yellow;";

   View vWorkSpace = new View();
   vWorkSpace.profile.width = 'flex';
   vWorkSpace.profile.height = 'flex';
   vWorkSpace.layout.type = 'linear';
   vWorkSpace.layout.orient = 'horizontal';
   vWorkSpace.style.cssText = "background: red;";

   //
   // Left menu
   View vLeftBar = new View();
   vLeftBar.profile.width = "10%";
   vLeftBar.profile.height = "10%";
   vLeftBar.layout.type = 'linear';
   vLeftBar.layout.orient = 'vertical';
   vLeftBar.layout.spacing = '10';

   View vLogo = new View();
   vLogo.addChild(new Image('images/google_chrome.png'));
   vLeftBar.addChild(vLogo);

   Button vButton = new Button();
   vButton.text = 'Sign in with Google';
   vLeftBar.addChild(vButton);
   vButton.on.click.add((e){      // Somehow I get an error here: Method 'add' not defined for class 'Stream'
      broadcaster.send(new ViewEvent('foo'));
   });

   vWorkSpace.addChild(vLeftBar);

   mainView.addChild(vWorkSpace);
   mainView.addToDocument(ref: tagElement, layout: true);
}

В другом месте в dart.app при обработке vButton событие клика. Как я мог найти (в коде) vLogo Посмотреть?

2 ответа

Решение

Самый простой способ получить представление в коде - дать ему идентификатор:

View vLogo = new View();
vLogo.id = "vLogo";

Затем в слушателе событий используйте запрос для доступа к нему:

button.query("#vLogo"); // returns vLogo

Однако в вашем случае вы сможете получить прямой доступ к экземпляру vLogo в закрытии прослушивателя событий.

Конечно, как и Element, View обеспечивает поиск на основе селектора CSS, называемый query и queryAll. Вы можете использовать их для получения представления при получении элементов DOM.

В общем, вам не нужно беспокоиться об IDSpace, если вы не хотите использовать один и тот же идентификатор в разных представлениях. Само дерево иерархии является пространством идентификаторов. Если представление реализует IDSpace, оно формирует другое пространство ID.

Другие вопросы по тегам