Tôi có một biểu mẫu cấu hình cho plugin Điều kiện mà tôi muốn có ajax. Khi chọn từ trường này, tôi muốn nhận danh sách hiển thị cho Chế độ xem đó:
chức năng công khai buildConfigurationForm(mảng $form, FormStateInterface $form_state) {
$form = parent::buildConfigurationForm($form, $form_state);
$views = $this->entityTypeManager->getStorage('view')->loadMultiple();
tùy chọn $ = [];
/** @var \Drupal\views\Views $view */
foreach ($lượt xem dưới dạng $view) {
$options[$view->id()] = $view->nhãn();
}
$form['#prefix'] = '<div id="views-settings">';
$form['#suffix'] = '</div>';
$view_id = $form_state->getValue('view_id');
nếu (trống($view_id)) {
$view_id = $form_state->getUserInput()["conditions"]["sfp_condition_view_not_empty"]["view_id"] ?? VÔ GIÁ TRỊ;
}
nếu (trống($view_id)) {
$view_id = $this->configuration['view_id'] ?? VÔ GIÁ TRỊ;
}
$displays = isset($view_id) ? $this->getViewsDisplays($view_id) : [];
$form['view_id'] = [
'#type' => 'chọn',
'#title' => $this->t('Xem'),
'#required' => ĐÚNG,
'#options' => $options,
'#default_value' => $view_id ? $options[$view_id] : '',
'#ajax' => [
'trình bao bọc' => 'cài đặt chế độ xem',
'gọi lại' => '::updateViewsDisplay',
'sự kiện' => 'thay đổi',
],
];
if (!empty($displays)) {
$form['view_display'] = [
'#type' => 'chọn',
'#title' => $this->t('Xem màn hình'),
'#required' => ĐÚNG,
'#options' => $displays,
'#default_value' => $displays[$this->configuration['view_display']] ?? $displays['default'],
];
}
trả về biểu mẫu $;
}
/**
* Xây dựng lại hình thức kích hoạt.
*
* @param mảng $form
* @param \Drupal\Core\Form\FormStateInterface $form_state
* @return mảng
*/
cập nhật chức năng công khaiViewsDisplay(mảng $form, FormStateInterface $form_state) {
trả về biểu mẫu $;
}
Xdebug xử lý tốt phương thức, nhưng tôi gặp lỗi AJAX này:
"Gọi lại #ajax được chỉ định trống hoặc không thể gọi được."
và không có gì xảy ra sau đó.
Tôi đã kiểm tra ở nơi khác nơi tôi đã thực hiện việc này và điểm khác biệt duy nhất mà tôi có thể thấy là những cái đã hoạt động là các biểu mẫu API Biểu mẫu Drupal thông thường và đây là một biểu mẫu phần bổ trợ được chuyển từ buildConfigurationForm. Bên ngoài đó, tôi không nhìn thấy vấn đề.