2016-09-26 3 views
3

나는 ModelAdminMyDataObject와 has_many이 내가 예를 들어, 부착 할 방법은SilverStripe Grid 필드 확장 순서 변경 후 자바 스크립트 콜백?

class TestAdmin extends ModelAdmin { 
    static $managed_models = array('MyDataObject'); 
    static $url_segment = 'testadmin'; 
    static $menu_title = 'TestAdmin'; 
} 

class MyDataObject extends DataObject { 
    private static $db = array('Name' => 'Varchar(255)'); 
    private static $has_many= array('AnotherDataObjects' => 'AnotherDataObject'); 

    function getCMSFields() { 
     $fields = parent::getCMSFields(); 

     if ($grid = $fields->dataFieldByName('AnotherDataObjects')) { 
      $grid->getConfig() 
       ->removeComponentsByType('GridFieldAddExistingAutocompleter') 
       ->addComponent(new GridFieldOrderableRows('Priority')); 

      $fields->removeByName('AnotherDataObjects'); 
      $fields->insertAfter($grid,'Name'); 
     } 

     return $fields; 
    } 
} 

class AnotherDataObject extends DataObject { 
    private static $db = array(
     'Name'  => 'Varchar(255)', 
     'Priority' => 'Int' 
    ); 
    private static $has_one = array('MyDataObject' => 'MyDataObject'); 
} 

내가 "재주문"이라고 볼 수 있습니다 제어하는 ​​AnotherDataObjectSilverStripe Grid Field Extensions Module ...

alert('Reorder Complete!'); 

... 일단 데이터베이스 변경으로 시스템이 완료되면 호출 할 수 있습니까?

답변

2

그리드 행이 재정렬 될 때 트리거되는 이벤트가 없습니다. 생성자를 다시 정의 할 수 있습니다 그러나 :

$(".ss-gridfield-orderable tbody").entwine({ 
     onadd: function() { 
      var self = this; 

      var helper = function(e, row) { 
       return row.clone() 
          .addClass("ss-gridfield-orderhelper") 
          .width("auto") 
          .find(".col-buttons") 
          .remove() 
          .end(); 
      }; 

      var update = function(event, ui) { 
       // If the item being dragged is unsaved, don't do anything 
       var postback = true; 
       if (ui.item.hasClass('ss-gridfield-inline-new')) { 
        postback = false; 
       } 

       // Rebuild all sort hidden fields 
       self.rebuildSort(); 

       // Check if we are allowed to postback 
       var grid = self.getGridField(); 
       if (grid.data("immediate-update") && postback) 
       { 
        grid.reload({ 
         url: grid.data("url-reorder") 
        }, function(data) { 
         self.onreordered(); 
        }); 
       } 
       else 
       { 
        var form = $('.cms-edit-form'); 
        form.addClass('changed'); 
       } 
      }; 

      this.sortable({ 
       handle: ".handle", 
       helper: helper, 
       opacity: .7, 
       update: update 
      }); 
     }, 
     onreordered: function() { 
      console.log('The grid was reordered'); 
     }, 
}); 

이 GridFieldExtensions.js 후로드해야