Spree.ready(function() {
  var productTemplate = HandlebarsTemplates['products/sortable'];
  var productListTemplate = function(products) {
    return _.map(products, productTemplate).join('') || "<h4>" + Spree.translations.no_results + "</h4>";
  };

  var saveSort = function(event, ui) {
    Spree.ajax({
      url: Spree.routes.classifications_api,
      method: 'PUT',
      data: {
        product_id: ui.item.data('product-id'),
        taxon_id: $('#taxon_id').val(),
        position: ui.item.index()
      }
    });
  };

  var sortable = $('#taxon_products').sortable().on({
    sortupdate: saveSort
  });

  var formatTaxon = function(taxon) {
    return Select2.util.escapeMarkup(taxon.pretty_name);
  };

  $('#taxon_id').select2({
    dropdownCssClass: "taxon_select_box",
    placeholder: Spree.translations.find_a_taxon,
    ajax: {
      url: Spree.routes.taxons_search,
      params: {
        "headers": {
          "X-Spree-Token": Spree.api_key
        }
      },
      data: function(term, page) {
        return {
          per_page: 50,
          page: page,
          q: {
            name_cont: term
          }
        };
      },
      results: function(data) {
        return {
          results: data['taxons'],
          more: data.current_page < data.pages
        };
      }
    },
    formatResult: formatTaxon,
    formatSelection: formatTaxon
  });

  $('#taxon_id').on("change", function(e) {
    Spree.ajax({
      url: Spree.routes.taxon_products_api,
      data: {
        id: e.val,
        simple: 1
      },
      success: function(data) {
        sortable.html(productListTemplate(data.products));
      }
    });
  });
});

@@ -1,12 +1,48 @@
+//= require solidus_admin/Sortable%0A%0A
 Spree.ready(
@@ -312,19 +312,34 @@
 on(e
-vent, ui) %7B
+) %7B%0A    var item = e.item;
 %0A   
@@ -456,22 +456,32 @@
 id: 
-ui.
 item.
+getAttribute('
 data
-('
+-
 prod
@@ -552,23 +552,18 @@
 on: 
-ui.item.i
+e.newI
 ndex
-()
 %0A   
@@ -585,94 +585,8 @@
 %7D;%0A%0A
-  var sortable = $('#taxon_products').sortable().on(%7B%0A    sortupdate: saveSort%0A  %7D);%0A%0A
   va
@@ -1555,24 +1555,36 @@
         
-sortable
+$('#taxon_products')
 .html(pr
@@ -1617,16 +1617,177 @@
 ducts));
+%0A%0A        var el = document.querySelector('#taxon_products')%0A%0A        new Sortable(el, %7B%0A          draggable: %22.sort_item%22,%0A          onEnd: saveSort%0A        %7D);
 %0A      %7D

Convert display order page to Sortable.js