Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Seaside

12 views
Skip to first unread message

Victor Metelitsa

unread,
Apr 17, 2006, 5:47:28 AM4/17/06
to
Решил наконец заняться Seaside вплотную, потому что у меня изменилось
отношение к этому софту - я стал ценить своё удобство разработки намного
выше удобства пользователей (я имею в виду букмарки и цвет посещённых
линков - поскольку URL постоянно меняется, то эта фича не работает).
Написал для пробы маленький форум (VW4 + последний Seaside с Cincom'а).

Первое, с чем я столкнулся - Seaside принудительно меняет кодировку на
utf8, а WebToolkit имеет какие-то проблемы с разбором ввода на utf8. Не
стал разбираться, что у WebToolkit'а не так, а проверрайдил пару-тройку
методов Seaside с тем, чтобы для HTML использовалась Windows-1251.

Второе - непонятно, как записать заголовок
(<html><head><title>ЗАГОЛОВОК...) - я думал, что достаточно перекрыть
WAComponent>>title, но оно не работает.

Третье - updateUrl: aUrl
У меня главный компонет пишет

updateUrl: aUrl
currentChild updateUrl: aUrl

а подчинённый (присвоенный currentChild)
updateUrl: aUrl

aUrl addParameter: 'forumId' value: forumId printString.
aUrl addParameter: 'Type' value: 'ThreadList'.
или
updateUrl: aUrl

aUrl addParameter: 'threadId' value: threadId printString.
aUrl addParameter: 'Type' value: 'PostList'.
или
updateUrl: aUrl

aUrl addParameter: 'Type' value: 'ForumList'.
(в зависимости от класса currentChild)

Я ожидал, что значения в url будут меняться, но они, появляясь,
"липнут", не исчезая более и не меняя значения, напр.,

http://127.0.0.1:8008/seaside/go/vvmUbb?Type=PostList&threadId=235&forumId=8&_k=dlvcEcJv&_s=ChGylmjkCitMyESO

когда мной ожидалось Type=ForumList, а &threadId=235&forumId=8 не должно
было быть вовсе.

или
http://127.0.0.1:8008/seaside/go/vvmUbb?Type=ForumList&forumId=15&threadId=235&_k=lvHdCiuC&_s=ChGylmjkCitMyESO

когда мной ожидалось Type=PostList&threadId=1256

--
Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru

Victor Metelitsa

unread,
Apr 17, 2006, 6:50:53 AM4/17/06
to
Victor Metelitsa wrote:
>
> Второе - непонятно, как записать заголовок
> (<html><head><title>ЗАГОЛОВОК...) - я думал, что достаточно перекрыть
> WAComponent>>title, но оно не работает.


МойКомпонент>>updateRoot: anHtmlRoot
super updateRoot: anHtmlRoot.
anHtmlRoot title: self title.

Victor Metelitsa

unread,
Apr 17, 2006, 7:12:08 AM4/17/06
to
Victor Metelitsa wrote:
> Я ожидал, что значения в url будут меняться, но они, появляясь,
> "липнут", не исчезая более и не меняя значения, напр.,
>
> http://127.0.0.1:8008/seaside/go/vvmUbb?Type=PostList&threadId=235&forumId=8&_k=dlvcEcJv&_s=ChGylmjkCitMyESO
>
>
> когда мной ожидалось Type=ForumList, а &threadId=235&forumId=8 не должно
> было быть вовсе.
>
> или
> http://127.0.0.1:8008/seaside/go/vvmUbb?Type=ForumList&forumId=15&threadId=235&_k=lvHdCiuC&_s=ChGylmjkCitMyESO
>
>
> когда мной ожидалось Type=PostList&threadId=1256
>

Я показываю currentChild, но предыдущих "детей" накапливаю в IdentitySet
и отдаю по сообщению child, ибо Seaside они зачем-то нужны. Seaside же
просит их updateUrl: тоже, что и приводит к неожиданному результату.
Пока что я поставил подкомпонентам проверку

updateUrl: aUrl

self == owner currentChild ifFalse: [^self].
и так далее.

Maxim Annenkov

unread,
Apr 17, 2006, 7:16:11 AM4/17/06
to
Опиши потом свои впечатления. Я как-то смотрел в сторону Seaside и большого
восторга, это у меня не вызвало.
И самый главный вопрос, зачем его так написали, эти игры со стеком?
Насколько я понимаю, именно это препятствую его портации в VAST.


Victor Metelitsa

unread,
Apr 17, 2006, 7:31:26 AM4/17/06
to
Victor Metelitsa wrote:
> Я показываю currentChild, но предыдущих "детей" накапливаю в IdentitySet
> и отдаю по сообщению child,

children

Victor Metelitsa

unread,
Apr 17, 2006, 8:06:57 AM4/17/06
to

Меня просто заколебал ввод/редактирование с заранее неизвестным
количеством полей на одной форме. Предположим, у нас есть коллекция
заказов (orders), у которых есть подробности (orderDetails) (на самом
деле у меня нечто другое), атрибуты в примере пишу "от фонаря". Надо
построить
a) Форму ввода
b) Сохранение в базе
"Обычными" средствами для input-полей в форме ввода приходится
придумывать имена и забивать в них базоданновые ключи, потом заниматься
разбором, приходится писать уйму ручного кода. На Seaside дела выглядят
проще.

renderContentOn: html

html form: [
orders do: [:eachOrder |
html
text: 'Заказчик: ';
textInputWithValue: eachOrder personName
callback: [:val | eachOrder personName: val].
html break.
html
text: 'Дата: ';
textInputWithValue: eachOrder date
callback: [:val | eachOrder dateFromString: val].
html break.
eachOrder orderDetails do: [eachDetail |
html
text: 'Название: ';
textInputWithValue: eachDetail name
callback: [:val | eachDetail personName: val].
html break.
].
html horisontalRule
].
html
submitButtonWithAction: [owner currentChild: (VvmOrdersSaver new
orders: orders)]
text: 'Сохранить'
]

имея в виду, что VvmOrdersSaver сохранит orders в базе при помощи
Glorp'а (считая на всякий случай, что порядок выполнения callback'ов не
определен, я думаю также, что когда у экземпляра VvmOrdersSaver будет
вызван renderContentOn:, они все уже будут выполнены).

Victor Metelitsa

unread,
Apr 17, 2006, 8:13:31 AM4/17/06
to
Victor Metelitsa wrote:
> eachOrder orderDetails do: [eachDetail |
> html
> text: 'Название: ';
> textInputWithValue: eachDetail name
> callback: [:val | eachDetail personName: val].
> html break.
> ].
> html horisontalRule
eachOrder orderDetails do: [eachDetail |
html
text: 'Название: ';
textInputWithValue: eachDetail name
callback: [:val | eachDetail name: val].

html break.
].
html horisontalRule

--

0 new messages