Điểm:1

Làm cách nào để thêm id trình bao bọc duy nhất vào thành phần tiện ích con?

lá cờ lb

Tôi đã tạo một tiện ích con "tạo" các trường dựa trên tùy chọn đã chọn của một trường được chọn. Tôi đã hoàn thành hầu hết logic:

1- Một tùy chọn được chọn từ trường này:

 $element['value'] = [
  '#type' => 'chọn',
  '#options' => $this->getBreakpointsGroups(),
  '#default_value' => $value,
  '#ajax' => [
    'callback' => [$this,'updateBreakpoint'], // đừng quên :: khi gọi một phương thức của lớp.
    'sự kiện' => 'thay đổi',
    'wrapper' => $wrapper_id, // Phần tử này được cập nhật với lệnh gọi lại AJAX này.
    'phương thức' => 'html',
  ]
];  

2-Sau đó, hàm updateBreakpoint được thực thi và nó tiến hành cập nhật biểu mẫu. Trước tiên, tôi trích xuất giá trị trình bao bọc trong trường hợp có nhiều biểu mẫu tiện ích để nó không nhắm mục tiêu một phiên bản khác có cùng biểu mẫu.

    $state = $form_state->getTriggeringElement();
    $wrapper_id = $state['#ajax']['wrapper'];

3- Sau khi thực hiện một số thay đổi đối với biểu mẫu, tôi trả lại các thay đổi và sử dụng lệnh AJAX

    $ajax_response = AjaxResponse mới();
    $ajax_response->addCommand(new HtmlCommand("div#{$wrapper_id}", $form['image_fieldset']));
    trả về $ajax_response;

Trình bao bọc được xác định bên trong hàm formElement theo cách sau:

    $wrapper_id = Html::getUniqueId('trình bao bọc');

Vấn đề là không có thay đổi nào được thực hiện. Khi tôi xác định $wrapper_id là một chuỗi không có bất kỳ hàm id duy nhất nào (ví dụ: 'trình bao bọc'), các thay đổi sẽ được thực hiện.Tôi bối rối không biết tại sao. Tôi đảm bảo kiểm tra giá trị của trình bao bọc vẫn tồn tại ở tất cả các biểu mẫu.

berliner avatar
lá cờ bd
Tôi nghĩ sẽ hữu ích khi xem toàn bộ mã của bạn cho phương thức trình tạo biểu mẫu và phương thức `updateBreakpoint`.
Điểm:0
lá cờ cn

Nếu bạn có nhiều trình bao bọc trên cùng một trang, bạn không thể chỉ dựa vào Html::getUniqueId. Bạn cần thêm càng nhiều thông tin có thể dự đoán càng tốt.

Ví dụ: trong một phần tử tiện ích trường đơn lẻ, bạn có thể thêm tên trường, trường cha và trường delta:

$field_name = $this->fieldDefinition->getName();
$parents = $form['#parents'];
$prefix = implode('-', array_merge($parents, [$field_name, $delta]));

$wrapper_id = $prefix . '-my-wrapper';

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.