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.