zk wire многокомпонентный - PullRequest
0 голосов
/ 11 декабря 2018

Я пытаюсь подключить несколько <button> (тег ZUL) в поле List<Button>.Цель состоит в том, чтобы создать несколько кнопок для удаления пользователя, указанного в списке пользователей.Когда кто-то нажимает кнопку, контроллер должен обработать событие onClick, чтобы вызвать модель, которая удалит пользователя из базы данных.

Проблемы:

  1. Iне знаю, действительно ли <button> s связаны.
  2. Не работает обработчик событий, объявленный с помощью @Listen("onClick = button").

Я не знаю, в чем проблемапроцесс автоматической разводки, обработка событий или и то, и другое.

backend.zul

Обратите внимание, что в каждой строке есть кнопка удаления с id="", соответствующим идентификатору пользователя.Мне это нужно для того, чтобы получить идентификатор пользователя и удалить запись с этим идентификатором.(Возможно, это не лучший способ сделать это, извините).

<?page title="Admin Backend" contentType="text/html;charset=UTF-8"?>
<?init class="zk_auth.controller.AuthenticationInitiator"?>
<zk>
<window title="Admin Backend" border="normal" apply="zk_auth.controller.UsersListController">
<listbox id="AllUsers" emptyMessage="No user found">
    <listhead>
        <listheader label="Email" sort="auto" />
        <listheader label="Name" sort="auto" />
        <listheader label="Surname" sort="auto" />
        <listheader label="Role" sort="auto" />
        <listheader />
    </listhead>
    <template name="model">
        <listitem>
            <listcell label="${each.email}" />
            <listcell label="${each.name}" />
            <listcell label="${each.surname}" />
            <listcell label="${each.role}" />
            <listcell>
                <button label="Delete" sclass="delete_user" id="${each.id }" />
            </listcell>
        </listitem>
    </template>
</listbox>
<button label="Test" id="TestButton" />
</window>
</zk>

zk_auth.controller.UsersListController

//Omitted imports for brevity

public class UsersListController extends SelectorComposer<Component>
{
    private static final long serialVersionUID = 1L;

    // Not fucus on this.
    @Wire
    private Listbox AllUsers;

    // Here is the problem
    // This is the collection wired to all delete buttons.
    @Wire("button")
    private List<Button> DeleteButtons;

    // This button works!
    @Wire
    private Button TestButton;

    // Not focus on this. It lists all the users and it works.
    @Listen("onCreate = #AllUsers")
    public void ListAllUsers()
    {
        UserModel Users = new UserModel();
        List<User> UsersList = new ArrayList<User>(Users.getAllUsers());
        AllUsers.setModel(new ListModelList<User>(UsersList));
    }

    // Here is the problem
    // This doesn't work. I also tried
    // @Listen("onClick = button.delete_user")
    @Listen("onClick = button")
    public void DeleteUser(MouseEvent event)
    {
        Messagebox.show("It works!");
    }

    // This simple autowiring works. It targets only one button with id="TestButton".
    // No conflict with other onClick event handler, if you delete the test
    // nothing change.
    @Listen("onClick = #TestButton")
    public void Test()
    {
        Messagebox.show("It works!");
    }
}

Результат

Это отрендеренная страница, просто для ясности

Вывод

Журнал консоли не показывает никаких ошибок или предупреждений.Я сделал какую-то ошибку?Как сделать несколько событий onClick несколькими кнопками и обработать событие одним обработчиком событий?

1 Ответ

0 голосов
/ 13 декабря 2018

Итак, позвольте мне сначала объяснить, почему это не работает на важных этапах для вашего случая:1. Создайте страницу.2. Подключите все компоненты на странице.3. Загрузите дату и заполните свои данные на странице.

Поскольку вы используете <template>, это отображается на этапе 3, поэтому в этот момент больше не будет проводки.

Я обновил существующую скрипку , запустите и дважды нажмите поиск.Он всегда будет указывать размер кнопок в списке.Итак, как вы можете видеть, он имеет 1 кнопку.

Решение:

Переадресация событий, как объяснено cor3000 в этой теме форума : Вот пример скрипки .

...