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

标签 javascript php silverstripe modeladmin

我有一个 ModelAdminMyDataObject 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!');

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

最佳答案

重新排序网格行时不会触发任何事件。但是您可以重新定义构造函数:

$(".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之后加载

关于SilverStripe 网格字段扩展重新排序后的 JavaScript 回调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39697619/

相关文章:

php - 如何使用 preg_replace 从某个字符中删除任何内容,直到字符串结束?

php - 使用MySQL数据库中的数据填写PDF表单

silverstripe - SS3 DataObject 在指定 DataObject 之后排序

file - SilverStripe 文件标题翻译

javascript - 如果输入字段为空,则隐藏带 Angular div

javascript - 页面底部的滚动条

javascript - 带有关联的 Sequelize.build

javascript - 如何在 C# Xamarin for WebView 中实例化 JavaScript 对象

php - 基于CNIC从两个数据库表中检索特定数据

templates - Silverstripe 4.2.1 实时站点不检测公共(public)命名空间模板