Điểm:0

Làm cách nào để xác định vị trí hiển thị form_state->setError khi sử dụng nhiều lệnh gọi lại ajax?

lá cờ cn

Tôi đang làm việc trên một số chức năng tùy chỉnh bên trong chế độ xem bảng dạng xem cho phép biểu mẫu 'chỉnh sửa nhanh' dưới dạng trường có sẵn thông qua plugin trường dạng xem.

Biểu mẫu được hiển thị riêng cho từng hàng bằng cách sử dụng một sub_id duy nhất được chuyển đến trình tạo biểu mẫu cho mỗi hàng.

Tôi có biểu mẫu đang hoạt động và nó gửi nội dung chính xác, nhưng vấn đề là tôi cần thực hiện hai việc khi gọi lại ajax, vì vậy tôi đang sử dụng hệ thống AjaxResponse() để thực hiện hai hành động khác nhau.

Hành động đầu tiên là cập nhật 'giá trị' của một cột cụ thể trong hàng dạng xem. Thứ hai về cơ bản chỉ là thực hiện return $form; để trả lại biểu mẫu.

Vấn đề là, khi biểu mẫu thực hiện xác thực thì xác thực hoạt động, ngoại trừ các thông báo không hiển thị cho đến khi tôi làm mới trang. Tôi không thể tìm ra cách cho nó biết trình bao bọc nào sẽ sử dụng để hiển thị thông báo biểu mẫu, vì tôi đang chuyển hai cái khác nhau cho phản hồi ajax vì tôi cần thực hiện hai thay đổi.

Mã tôi đang sử dụng bên trong cuộc gọi lại ajax của mình là:

chức năng công cộng quickEditAjax(&$form, FormStateInterface $form_state) {
    $values ​​= $form_state->getValues();

    $response = new AjaxResponse();

    $status = \Drupal::entityTypeManager()->getStorage('taxonomy_term')->load($values['status']);
    $response->addCommand(new ReplaceCommand('.request-status-'. $values['id'],$status->getName()));
    $response->addCommand(new ReplaceCommand('#quick-edit-wrapper-'. $this->sub_id,$form));

    trả lại phản hồi $;
  }

ở đâu #quick-edit-wrapper-$this->sub_id là #id duy nhất được đặt trên biểu mẫu và .request-status-$values['id'] là lớp được gắn vào cột xem bảng mà tôi đang cố thay đổi.

Cả biểu mẫu và cột trong bảng đều có id và lớp chính xác trên chúng và cột cập nhật thành công thông qua lệnh gọi lại ajax addCommand().

Thông báo lỗi xác thực không hiển thị trong cả hai trình bao bọc, nhưng tôi muốn nó hiển thị trong #chỉnh sửa nhanh trình bao bọc vỏ bánh. Nếu không có lỗi xác thực và quá trình gửi được thực hiện, tôi cũng chuyển một thông báo thành công và thông báo đó cũng không hiển thị cho đến khi tôi làm mới trang.

Có cách nào để tôi có thể nói cụ thể cho các thông báo biết trình bao bọc nào sẽ hiển thị không? Phản hồi ajax dường như bị nhầm lẫn với việc sử dụng phản hồi nào.

Điểm:1
lá cờ cn

Thêm khối thông báo trạng thái vào biểu mẫu:

nếu ($form_state->hasAnyErrors()) {
  $form['status_messages'] = [
    '#type' => 'tin nhắn_trạng thái',
    '#trọng lượng' => -1000,
  ];
  $form['#sorted'] = FALSE;
}
$response->addCommand(new ReplaceCommand('#quick-edit-wrapper-' . $this->sub_id, $form));
Ex0r avatar
lá cờ cn
Làm việc hoàn hảo! Cảm ơn bạn.

Đă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.