Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Smalltalk
Перезагрузить страницу Seaside - как правильно реализовать навигацию
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Life_Freedom_Love Life_Freedom_Love вне форума
Member
 
Сообщений: 33
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 07.08.2004
По умолчанию Seaside - как правильно реализовать навигацию - 26.10.2010, 13:24

Всем доброе время суток!

Дано:

1) Приложение разделено на разделы
- Журналы
- Отчеты
- Карты
- Справочники
- Администрирование

2) Разделы содержат под-разделы, например:
Журналы:
- Учет технологических операций
- Учет того
- Учет сего
....
Справочники:
- Области
- Техника
- ...

3) Дизайн приложения - например как gmail
- глобальная навигация в верху страницы
- Выбирая разделы в глобальной навигации
текущим становится соответствующий раздел
со своей навигацией второго уровня (левая вертикальная колонка)
- При выборе элемента навигации второго уровня в центральном блоке
активируется соответствующий функционал (учетный журнал, карта ,..)

Вопрос:
Как это правильно (с позиции архитектуры Seaside реализовывать)?

Обнаружил единственный подход - использование встраивания компонент:
Например: Компонент оболочка содержит компоненты: навигация, РазделЖурналы, РазделХХХ (которые отображаются в зависимости от выбора в компоненте навигация)
Но в этом подходе смущает необходимость инстанцировать дочерние компонены в initialize родительского компонента, что в итого приведет к созданию полного (условно) дерева компонент приложения - даже если пользователь не планирует использовать их в полном объеме

Если бы можно было - динамически определять - создавать-активировать
Например: компонент обертка, который по команде делает call: (Подсистема new),
но call без answer - c ... (Подсистема new), дает еще более худший результат - экземпляры накапливаются в контексте приложения - не удаляясь

В общем - у кого есть идеи как реализовать - заранее благодарен )







С уважением,
Алексей Каменев
Ответить с цитированием
  (#2 (permalink)) Старый
Assargadon Assargadon вне форума
Новичок
 
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 24.12.2010
По умолчанию 24.12.2010, 17:43

Цитата:
Но в этом подходе смущает необходимость инстанцировать дочерние компонены в initialize родительского компонента
Так не надо инстанциировать их в initialize. Я в очень похожей ситуации делал примерно так:

smalltalk Код:
RootComponent>>initialize
   dictionaryWithComponents:=Dictionary new.

RootComponent>>renderContentOn: html
.....
   (user wants to use this component) ifTrue:[html render: (self componentFor: UsersListComponent)].
.....

RootComponent>>componentFor: aComponentClass
   ^dictionaryWithComponents at: aComponentClass ifAbsentPut:[aComponentClass new]

RootComponent>>children
   ^dictionaryWithComponents values
Ответить с цитированием
  (#3 (permalink)) Старый
Kleptsov Kleptsov вне форума
Новичок
 
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 14.11.2009
По умолчанию 16.01.2011, 21:39

Способ с использованием сессии.

Сначала создать подкласс MySession класса WASession. Добавить две переменные экземпляра назвав, к примеру, section и subSection. Определить методы доступа к этим переменным. MySession>>section, MySession>>section: aSection, MySession>> subSection, MySession>>subSecion: aSubSection. И использовать эту сессию для своего приложения. В метод MySession>>initialize добавить код инициализации переменных.

Отображать разделы и подразделы из корневого приложения можно таким образом:
MyApplication>>renderContentOn: html
...
html render: (html session section).
...
...
html render: (html session subSection).

Каждый пользователь просматривая сайт будет использовать отдельный экземпляр сессии (MySession) и соответственно значения переменных subSection и section будут разные.

По такому принципу возможно вложение подразделов на любой уровень.

И в заключении в метод MyApplication>>state внести изменения для корректной работы Seaside.
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Составление алгоритма как правильно реализовать EugeneBrikov Алгоритмы 1 26.04.2011 10:21
Nokia сделала GPS-навигацию бесплатной Garik Новости 0 21.01.2010 19:31
П(от X=1 до N) (X^3-2X) как это реализовать AlexP1989 Lisp 1 04.12.2009 12:53
Работа с Graphics32 как правильно реализовать Docik C++ Builder 1 14.03.2008 00:40
IDE под QT4 как реализовать alexx1524 Trolltech Qt 1 19.02.2008 19:20
TCP\IP под DOS как реализовать cherubic_ru Сетевое программирование 1 29.03.2007 13:54
Dll в Dll как это реализовать Zhbanito С/С++ 4 27.02.2007 05:43
Seaside и OmniBase как внедрить персистентность VladimirPogorelenko Smalltalk 4 03.10.2006 15:55
Как правильно реализовать библиотеку для работы с временем BabyBear С/С++ 21 25.01.2006 03:29
3d как в FPS как это реализовать BitchBoy Pascal 3 17.11.2005 23:42
Как правильно реализовать передачу строк Aglob С/С++ 2 01.06.2005 19:10
Как под DOS реализовать TCP/IP stud С/С++ 0 17.02.2004 10:20



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов