Smalltalk / Seaside-более элегантный способ использования переключателей?


Поэтому я хочу сделать что-то вроде:

html unorderedList: [
group := html radioGroup.
self employeeNames do: [ :eachEmp | 
                    html listItem: [
                                group radioButton
                                   selected: <set tmpVar = empKey>
                                   callback: [ self <dependent on button pushed> ].            
                         html text: eachEmp ] ] ]   ]

Что я хотел бы сделать, так это создать список сотрудников с переключателями на каждой строке. Затем, в зависимости от выбранного переключателя и нажатой кнопки, мы выполняем некоторые действия.

Таким образом, визуальное представление того, что я хочу, выглядит примерно так:

|Пост Табель| --- |История Расписания| --- |Напечатать Чек| --- |Удалить|

  • сотрудник 1 ..... данные.... данные.... данные
  • сотрудник 2 ..... данные.... данные.... данные
  • сотрудник 3 ..... данные.... данные.... данные
  • сотрудник 4 ..... данные.... данные.... данные
  • сотрудник 5 ..... данные.... данные.... данные

Таким образом, они могли бы, например, выбрать сотрудника 3, а затем нажать |Delete| - это вызовет удаление для сотрудника 3.

Я думаю, что могу справиться с тем, что нужно сделать для selected: части моего кода, но я понятия не имею, как справиться с обратным вызовом? Есть ли способ динамически выбирать, что именно позвонить?

1 2

1 ответ:

Поскольку вы все равно используете группу Радио, вы сможете выбрать только одну запись из списка сотрудников. Теперь, если вы используете элемент form для обертывания элементов управления, ваши якоря действий могут просто вызвать отправку формы:

formName := 'employee-form'.

html form
    name: formName;
    with: [
        html unorderedList: [
            group := html radioGroup.
            self employeeNames do: [ :eachEmp | 
            html listItem: [
                group radioButton
                    selected: nil "<set tmpVar = empKey>";
                    callback: [ :value | self "<dependent on button pushed>" ];  
                    with: eachEmp ] ] ] ].

html anchor
    submitFormNamed: formName;
    callback: [ :value | self handleDelete ]
    with: 'delete'

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

Примечание сбоку: обратите внимание на использование with: для установки текста якоря и переключателя. Вы должны почти всегда использовать with: в качестве последнего сообщение для html.