Giới thiệu gem Remotipart
Bài đăng này đã không được cập nhật trong 8 năm
Remotipart là một gem Ruby on Rails giải quyết vấn đề upload files sử dụng Jquery Ajax.
Phụ thuộc
Gem jquery-rails là được bao gồm mặc định trong Rails 3 và Rails 4, cài đặt Jquery và Rails JQuery UJS driver (jquery-ujs).
Cài đặt
Ứng dụng của bạn cần sử dụng gem jquery-rails version v.2.3.0 hoặc cao hơn. Nếu bạn đang sử dụng phiên bản cũ của gem jquery-rails, bạn cần có sự hỗ trợ về phiên bản của jquery-ujs (rails.js hoặc jquery_ujs.js) từ VERSION_COMPATIBILITY.
-
Cài đặt gem Remotipart
-
Thêm vào GEMFILE (sử dụng các phiên bản thích hợp nếu cần)
gem 'remotipart', '~1.2'
-
Sau đó chạy
bundle install
-
-
Các tập tin js sẽ tự động được thêm vào asset, nên thêm dòng sau vào app/assets/javascripts/application.js (ngay sau //= require jquery_ujs)
//= require jquery.remotipart
-
Các files js cần được thêm
:defaults
vào ứng dụng javascript của bạn<%= javascript_include_tag :defaults %>
Sử dụng
-
Đối với multipart / forms với các tập tin inputs, thiết lập remote trong form_for giống như cho form ajax thông thường:
remote: true
-
Khi Javascript được kích hoạt trong trình duyệt, form, bao gồm cả các tập tin sẽ được gửi không đồng bộ với các controller bằng:
:format => 'js'
-
Nếu bạn muốn xác định một yêu cầu cụ thể được thực hiện thông qua form remotipart
-
Từ controller hoặc view của ứng dụng:
if remotipart_submitted?
-
Từ javascript:
$(form).bind("ajax:success", function(){ if ( $(this).data('remotipartSubmitted') ) });
-
-
Nếu bạn muốn nhận được thông báo khi upload xong (có thể thành công hoặc lỗi)
-
Từ javascript:
$(form).on("ajax:remotipartComplete", function(e, data){ console.log(e, data) });
-
Ví dụ
sample_layout.html.erb
<%= form_for @sample, :html => { :multipart => true }, :remote => true do |f| %>
<div class="field">
<%= f.label :file %>
<%= f.file_field :file %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
sample_controller.rb
def create
respond_to do |format|
if @sample.save
format.js
end
end
end
create.js.erb
// Display a Javascript alert
alert('success!');
<% if remotipart_submitted? %>
alert('submitted via remotipart')
<% else %>
alert('submitted via native jquery-ujs')
<% end %>
Tài liệu tham khảo
All rights reserved