ฉันสร้างวิดเจ็ตที่ "สร้าง" ฟิลด์ตามตัวเลือกที่เลือกจากฟิลด์ที่เลือก
ฉันทำตรรกะส่วนใหญ่เสร็จแล้ว:
1- ตัวเลือกถูกเลือกจากฟิลด์นี้:
$องค์ประกอบ['ค่า'] = [
'#type' => 'เลือก',
'#options' => $this->getBreakpointsGroups(),
'#default_value' => $value,
'#อาแจ็กซ์' => [
'callback' => [$this,'updateBreakpoint'], // อย่าลืม :: เมื่อเรียกเมธอดคลาส
'เหตุการณ์' => 'เปลี่ยนแปลง',
'wrapper' => $wrapper_id, // องค์ประกอบนี้ได้รับการอัพเดตด้วยการโทรกลับ AJAX นี้
'วิธีการ' => 'html',
]
];
2- จากนั้นฟังก์ชั่น updateBreakpoint จะถูกดำเนินการและดำเนินการต่อเพื่ออัปเดตแบบฟอร์ม ก่อนอื่น ฉันจะแยกค่า wrapper ในกรณีที่มีวิดเจ็ตหลายฟอร์ม ดังนั้นจึงไม่กำหนดเป้าหมายอินสแตนซ์อื่นของฟอร์มเดียวกัน
$state = $form_state->getTriggeringElement();
$wrapper_id = $state['#ajax']['wrapper'];
3- หลังจากทำการเปลี่ยนแปลงบางอย่างกับแบบฟอร์ม ฉันจะส่งคืนการเปลี่ยนแปลงและใช้คำสั่ง AJAX
$ajax_response = ใหม่ AjaxResponse();
$ajax_response->addCommand(new HtmlCommand("div#{$wrapper_id}", $form['image_fieldset']));
ส่งคืน $ajax_response;
wrapper ถูกกำหนดภายในฟังก์ชัน formElement ด้วยวิธีต่อไปนี้:
$wrapper_id = Html::getUniqueId('wrapper');
ปัญหาคือไม่มีการเปลี่ยนแปลง เมื่อฉันกำหนด $wrapper_id เป็นสตริงโดยไม่มีฟังก์ชัน id เฉพาะ (เช่น 'wrapper') การเปลี่ยนแปลงจะเกิดขึ้นฉันงงว่าทำไม ฉันแน่ใจว่าได้ตรวจสอบค่าของ wrapper ที่คงอยู่ในรูปแบบทั้งหมด