SilverStripe网格字段扩展重新排序后的JavaScript回调?

时间:2016-09-26 08:05:09

标签: javascript php silverstripe modeladmin

我有ModelAdmin MyDataObject has_many AnotherDataObjectSilverStripe Grid Field Extensions Module正在控制

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');
}

我可以看到“重新排序”被调用,我将如何附加,例如......

alert('Reorder Complete!');

...系统完成数据库更改后调用?

1 个答案:

答案 0 :(得分: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

之后加载