Код: Выделить всё
BaseTable.phpКод: Выделить всё
table.blade.phpСтруктура компонента
- [/b] включает общие функции, такие как нумерация страниц, сортировка и фильтры, а также предоставляет перехватчики жизненного цикла (
Код: Выделить всё
BaseTable.phpКомпонент, обезвоживание и т. д.).Код: Выделить всё
hydrate - Дочерние компоненты наследуют BaseTable и должны переопределять следующее:
- : возвращает запрос, соответствующий назначению дочернего компонента.
Код: Выделить всё
getQuery() - : определяет отображаемые столбцы таблицы.
Код: Выделить всё
$columns
Код: Выделить всё
protected function getQuery()
{
return Model::query()->where(...); // Custom query
}
public $columns = [
['name' => 'id', 'label' => 'ID', 'sortable' => true],
['name' => 'name', 'label' => 'Name', 'sortable' => true],
];
Код: Выделить всё
table.blade.phpПроблема
- Во время первоначального монтирования $this->data корректно заполняется с помощью replaceData() и отображается в таблице.
- Изменение количества строк на странице или навигация работает нормально, а $this->data обновляется как ожидаемо.
- Однако, когда я нажимаю на строку, происходит следующее:
- Строки таблицы исчезнут (больше не отображаются на экране).
- показывает, что
Код: Выделить всё
loggerочищается во время обезвоживания[/b].Код: Выделить всё
$this->data
Ключевые сведения о жизненном цикле
[code]refreshData()[/code][/b]
Вызывается для загрузки данных на основе запроса.Код: Выделить всё
protected function refreshData()
{
$this->data = $this->getQuery()
->orderBy($this->orderByColumn, $this->orderByDirection)
->skip($this->page * $this->perPage - $this->perPage)
->take($this->perPage)
->get();
}
[code]handleRowClick()[/code][/b]
Вызывается при щелчке по строке.Код: Выделить всё
public function handleRowClick($row)
{
logger($this->data); // Logs show $this->data is already empty
$this->expandSubData($row['id']);
$this->clickItem($row);
logger($this->subData);
}
Код: Выделить всё
@foreach ($data as $index => $row)
{{-- table columns section --}}
- ведет себя так, как ожидалось: $this->data изначально содержит правильные данные.
Код: Выделить всё
hydrate - Во время обезвоживания $this->data очищается без видимой причины.
- Нажатие на строку приводит к тому, что $this->data становится пустым, а строки таблицы исчезают.
Что у меня есть Пробовал - Проверил, что никакой явный код не изменяет $this->данные во время обезвоживания. code>.
- Добавлен регистратор в перехватчиках жизненного цикла для отслеживания состояния $this->data.
- Протестировано с использованием резервной переменной для сохранения данных, но $this->data все равно получает очищено.
- Проверено на непредвиденный сброс состояния в переопределенных методах, но ничто не изменяет напрямую $this->data.
ВопросЧто может привести к удалению $this->данных во время фаза обезвоживания? Почему эта проблема возникает только при нажатии на строку и как ее можно отладить или устранить?
Подробнее здесь: https://stackoverflow.com/questions/792 ... sing-table
Мобильная версия