Javascript 控制某些项目的位置,同时对其余项目进行排序
我有一个Javascript 控制某些项目的位置,同时对其余项目进行排序,javascript,php,silverstripe,Javascript,Php,Silverstripe,我有一个ModelAdmin和MyDataObject有许多另一个dataobject,它控制着 class TestAdmin extends ModelAdmin { static $managed_models = array('MyDataObject'); static $url_segment = 'testadmin'; static $menu_title = 'TestAdmin'; } class MyDataObject extends DataO
ModelAdmin
和MyDataObject
有许多另一个dataobject
,它控制着
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)',
'Type' => "Enum('Middle,Top,End','Middle')",
'Priority' => 'Int'
);
private static $has_one = array('MyDataObject' => 'MyDataObject');
function onBeforeWrite() {
parent::onBeforeWrite();
if($this->Type == 'Top')
$this->Priority = DB::query("SELECT MIN(Priority) FROM Type = 'Top'")->value();
if($this->Type == 'End')
$this->Priority = DB::query("SELECT MAX(Priority) FROM AnotherDataObjectWHERE Type = 'End'")->value() + 1;
}
}
我想在
另一个数据对象上使用Type
来控制排序顺序,以便顶部的项目保持在顶部,然后在末尾结束。我认为最简单的方法是防止“拖拽”或“掉落”到这些位置,并控制onforebroite
中顶部/末端项目的优先级。。。但我不知道如何禁用这些“拖放”。。。或者如果有更好的方法?您需要覆盖jQuery UI可排序初始化:
$(".ss-gridfield-orderable tbody").entwine({
onadd: function() {
// skipped code
// the `cancel` option allows to exclude items from drag&drop sorting
this.sortable({
handle: ".handle",
helper: helper,
opacity: .7,
update: update,
cancel: ".ui-state-nosort"
});
},
});
您需要将新类“.ui state nosort”添加到要从排序中排除的行中