【发布时间】:2015-04-14 12:05:40
【问题描述】:
我的控制器是文件中shipments_controller.rb的扩展版本shipments_controller_decorator.rb。
Spree::Api::ShipmentsController.class_eval do
before_filter :find_and_update_shipment, only: [:ship, :ready, :add, :remove, :deliver]
def deliver
@shipment.deliver!
respond_with(@shipment, default_template: :show)
end
end
我的路线是:
put '/api/shipments/:id/deliver', :to => 'spree/api/shipments#deliver', :constraints => {:format => /json/} ,:as => "shipment_deliver"
在 application.js 文件中,我有
//= require jquery
//= require jquery_ujs
//= require bootstrap
$(document).ready(function(){
$('a.deliver.button.fa.fa-arrow-right').on('ajax:success', function(data, status, xhr) {
console.log("Hey!! I am there....")
location.reload();
});
})
我有视图_shipment.html.erb:
<div id="<%= "shipment_#{shipment.id}" %>" data-hook="admin_shipment_form">
<%= render :partial => "spree/admin/variants/split", :formats => :js %>
<fieldset class="no-border-bottom">
<legend align="center" class="stock-location" data-hook="stock-location">
<span class="shipment-number"><%= shipment.number %></span>
-
<span class="shipment-state"><%= Spree.t("shipment_states.#{shipment.state}") %></span>
<%= Spree.t(:package_from) %>
<strong class="stock-location-name" data-hook="stock-location-name">'<%= shipment.stock_location.name %>'</strong>
<% if shipment.ready? and can? :update, shipment %>
-
<%= link_to Spree.t(:ship), '#', :class => 'ship button fa fa-arrow-right', :data => {'shipment-number' => shipment.number} %>
<% elsif shipment.shipped? and can? :update, shipment %>
-
<%= link_to Spree.t(:deliver), main_app.shipment_deliver_path(shipment), {method: :put, :remote => true, data: {'shipment-number' => shipment.number}, :class => 'deliver button fa fa-arrow-right'} %>
<% end %>
</legend>
</fieldset>
现在,当点击 Deliver 链接时,正确的控制器操作正在执行,并且所有数据都被更新到。但唯一没有发生的事情页面重新加载。调试console.log也没有打印任何东西。
我也看了jquery-ujs wiki 链接,没有运气!
知道如何解决吗?
【问题讨论】:
-
不是
.on('ajaxSuccess')而不是ajax:success吗? -
您的
<a>元素是否设置了data-remote属性? -
@haim770 是的..
remote: true选项可以做到.. -
@haim770 我签入了浏览器.. Ajax 调用正在发生。只是事件没有被调用。
标签: jquery ruby-on-rails spree ujs