ฉันมีรูปแบบการกำหนดค่าสำหรับปลั๊กอินเงื่อนไขที่ฉันต้องการมี ajax เมื่อเลือกจากฟิลด์นี้ ฉันต้องการรับรายการการแสดงผลสำหรับมุมมองนั้น:
ฟังก์ชันสาธารณะ buildConfigurationForm (อาร์เรย์ $form, FormStateInterface $form_state) {
$form = parent::buildConfigurationForm($form, $form_state);
$views = $this->entityTypeManager->getStorage('view')->loadMultiple();
$ตัวเลือก = [];
/** @var \Drupal\views\Views $ดู */
foreach (ดู $ เป็น $ ดู) {
$options[$view->id()] = $view->label();
}
$form['#prefix'] = '<div id="views-settings">';
$form['#suffix'] = '</div>';
$view_id = $form_state->getValue('view_id');
ถ้า (ว่าง ($ view_id)) {
$view_id = $form_state->getUserInput()["conditions"]["sfp_condition_view_not_empty"]["view_id"] ?? โมฆะ;
}
ถ้า (ว่าง ($ view_id)) {
$view_id = $this->configuration['view_id'] ?? โมฆะ;
}
$displays = isset($view_id) ? $this->getViewsDisplays($view_id) : [];
$แบบฟอร์ม['view_id'] = [
'#type' => 'เลือก',
'#title' => $this->t('ดู'),
'#required' => จริง,
'#options' => $ตัวเลือก,
'#default_value' => $view_id ? $options[$view_id] : '',
'#อาแจ็กซ์' => [
'wrapper' => 'การตั้งค่ามุมมอง',
'callback' => '::updateViewsDisplay',
'เหตุการณ์' => 'เปลี่ยนแปลง',
]
];
ถ้า (!empty($displays)) {
$แบบฟอร์ม['view_display'] = [
'#type' => 'เลือก',
'#title' => $this->t('ดูการแสดงผล'),
'#required' => จริง,
'#options' => $displays,
'#default_value' => $displays[$this->configuration['view_display']] ?? $displays['ค่าเริ่มต้น'],
];
}
คืนฟอร์ม $;
}
/**
* สร้างแบบฟอร์มทริกเกอร์ใหม่
*
* @param อาร์เรย์ $form
* @param \Drupal\Core\Form\FormStateInterface $form_state
* @return อาร์เรย์
*/
ฟังก์ชั่นสาธารณะ updateViewsDisplay (อาร์เรย์ $form, FormStateInterface $form_state) {
คืนฟอร์ม $;
}
Xdebug ใช้วิธีนี้ได้ดี แต่ฉันได้รับข้อผิดพลาด AJAX นี้:
"การโทรกลับ #ajax ที่ระบุว่างเปล่าหรือไม่สามารถโทรได้"
และไม่มีอะไรเกิดขึ้นหลังจากนั้น
ฉันตรวจสอบที่อื่นที่ฉันได้ทำสิ่งนี้แล้ว และข้อแตกต่างเพียงอย่างเดียวที่ฉันเห็นคือแบบฟอร์มที่ทำงานเป็นแบบฟอร์ม Drupal Form API ปกติ และนี่คือแบบฟอร์มปลั๊กอินที่ส่งผ่านจาก buildConfigurationForm นอกนั้นไม่เห็นเป็นประเด็น