Tôi có một ứng dụng Rails trong đó tôi có một hình thức mà trông giống như sau:Rails: Lồng hình thức từ xa không hoạt động trên tải trang
[ Parent list item 1 ]
[ Parent list item 2 ]
[ Parent list item 3 - expanded ]
[ Child list item 1 ]
Child inline input Child submit button
------------------
[Parent input]
Parent submit button
Phụ huynh tổ chức đầu vào luôn luôn hoạt động. Nó là một hình thức từ xa, sử dụng remote: true
. Khi tôi thêm một đối tượng cha, nó sẽ tự động được thêm vào danh sách với các đối tượng cha khác. Mỗi phụ huynh có thể có nhiều trẻ em, chúng được hiển thị và được liệt kê khi người dùng mở rộng mục danh sách mẹ tương ứng (như ví dụ ở trên). Người dùng có thể thêm nhiều trẻ em hơn bằng cách nhập một giá trị trong số Child inline input
, biểu mẫu này cũng đang sử dụng remote: true
.
Sự cố tôi gặp phải là việc thêm phần tử con không phải lúc nào cũng hoạt động trên lần tải trang đầu tiên. Nó hoạt động tuy nhiên nếu tôi làm mới trang. Tôi đang gặp khó khăn để hiểu tại sao điều này lại xảy ra.
Khi tôi tạo ra một bố mẹ phản đối sau js.erb
được hiển thị:
# screen_table_id is the list with parent objects.
# localized_strings/localized_string is the tr with the object
$("#screen_table_<%= @localized_string.screen.id %>").append("<%= j render partial: 'localized_strings/localized_string', locals: { screen: @localized_string.screen, localized_string: @localized_string } %>");
# I use the best in place gem to manage inline editing
jQuery('.best_in_place').best_in_place()
Các bộ phận có liên quan của localized_strings/localized_string
trông như thế này:
%tbody{ id: "localized_string_parent_#{localized_string.id}"}
%tr
%td.expandable-column
Clicking this reveals the child objects
/The list of children is initially hidden
%tbody.hidden[localized_string]
- if localized_string.translations.any?
/Renders the children
%tr
/This form doesn't work on page load, after I have added the parent
= render "translations/inline_form", app: localized_string.screen.app, screen: localized_string.screen, localized_string: localized_string, translation: localized_string.translations.build
Và translations/inline_form
trông như thế này:
= form_for [app, screen, localized_string, translation], remote: true do |f|
%td{ colspan: 2 }
.inline-form-group
= f.text_field :value, class: "form-control inline-form-control", placeholder: "Translation value", id: "localized_string_input_# {localized_string.id}"
%td
/Sometimes nothing happens when I click Submit.
= f.submit 'Add translation', class: "btn ban-success-outline"
Dòng chảy bị lỗi trông giống như này:
- Trang tải và tôi có thể tạo một đối tượng cha mẹ (
LocalizedString
) - Nó được thêm vào danh sách một cách chính xác.
- Mở rộng phần tử danh sách mẹ mới hoạt động như mong đợi.
- Khi nhấp vào nút gửi cho trẻ (
Translation
) thìnothing
.
Hy vọng câu hỏi của tôi là dễ hiểu. Xin vui lòng bình luận nếu bạn có bất kỳ ý kiến hoặc cần làm rõ. Tôi đang tankful cho tất cả các ý tưởng.
Cảm ơn bạn! Tôi sẽ kiểm tra nó! – Anders
Cũng vì bạn đã sử dụng JS, hãy cân nhắc việc thay thế chức năng đó bằng một thành phần phản ứng. Đá quý [phản ứng-ray] (https://github.com/reactjs/react-rails) nổi bật và được hỗ trợ tốt.Thêm vào đó nó cho phép bạn nhắm mục tiêu các phần tử giao diện người dùng cụ thể như thế này, với các thành phần có thể tái sử dụng, mà không cần phải đi theo tuyến đường của một ứng dụng JS trang đơn lẻ. Một lưu trữ Flow/Backbone có thể là quá mức cần thiết cho ứng dụng này nhưng đối với các thành phần đơn giản, bạn chỉ có thể sử dụng ajax của jQuery để thực hiện các cập nhật trong thành phần phản ứng của bạn. – engineerDave