Первое, с чем я столкнулся - 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 будут меняться, но они, появляясь,
"липнут", не исчезая более и не меняя значения, напр.,
когда мной ожидалось Type=ForumList, а &threadId=235&forumId=8 не должно
было быть вовсе.
когда мной ожидалось Type=PostList&threadId=1256
--
Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru
МойКомпонент>>updateRoot: anHtmlRoot
super updateRoot: anHtmlRoot.
anHtmlRoot title: self title.
Я показываю currentChild, но предыдущих "детей" накапливаю в IdentitySet
и отдаю по сообщению child, ибо Seaside они зачем-то нужны. Seaside же
просит их updateUrl: тоже, что и приводит к неожиданному результату.
Пока что я поставил подкомпонентам проверку
updateUrl: aUrl
self == owner currentChild ifFalse: [^self].
и так далее.
children
Меня просто заколебал ввод/редактирование с заранее неизвестным
количеством полей на одной форме. Предположим, у нас есть коллекция
заказов (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:, они все уже будут выполнены).
--