Extjs 3.x: можно ли сделать панель или контейнер подвижными?
У меня есть Ext.Container, и мне нужно добавить к нему перемещаемый пользователем объект.
В другом месте я вижу, что Ext.Window не должен быть вложен в объекты, поэтому какие у меня есть варианты относительно других подвижных объектов Ext?
С уважением, Каспер
4 ответа
Возвращаясь к этой проблеме, ваши предложения помогли мне на этом пути. Документация ExtJS для панели предлагает, как сделать пользовательскую реализацию draggable.
draggable: {
// Config option of Ext.Panel.DD class.
// It's a floating Panel, so do not show a placeholder proxy in the original position.
insertProxy: false,
// Called for each mousemove event while dragging the DD object.
onDrag : function(e){
// Record the x,y position of the drag proxy so that we can
// position the Panel at end of drag.
var pel = this.proxy.getEl();
this.x = pel.getLeft(true);
this.y = pel.getTop(true);
// Keep the Shadow aligned if there is one.
var s = this.panel.getEl().shadow;
if (s) {
s.realign(this.x, this.y, pel.getWidth(), pel.getHeight());
}
},
// Called on the mouseup event.
endDrag : function(e){
this.panel.setPosition(this.x, this.y);
}
}
В моем проекте мне нужно было перетаскивать элементы внутри элемента контейнера, поэтому мне нужно было сделать что-то дополнительное.
Зачем? Поскольку извлечение любой информации о положении выполняется в пространстве браузера-окна, а установка позиции, по-видимому, находится в родительском пространстве. Таким образом, мне нужно было перевести позицию перед установкой конечной позиции панели.
// Called on the mouseup event.
endDrag: function (e) {
if (this.panel.ownerCt) {
var parentPosition = this.panel.ownerCt.getPosition();
this.panel.setPosition(this.x - parentPosition[0], this.y - parentPosition[1]);
} else {
this.panel.setPosition(this.x, this.y);
}
}
Я надеюсь, что это может помочь другим, и еще раз большое спасибо за ваш вклад:)
Я не уверен, но, возможно, вы можете попробовать floating
атрибут панелей.
Ответ на самом деле очень прост. Вам просто нужно объединить ответ Драсилла с ответом Брайана Мескау и добавить ширину и высоту.
Ext.define('CustomPanel',{
extend: 'Ext.form.Panel',
title: 'Custom panel',
floating: true,
draggable: true,
width: 600,
height: 400,
//closable: true,
})
Технически это будет работать без floating
, но это вызывает неожиданное поведение, если ваша панель является потомком чего-то другого. Например, панель может оказаться за своими братьями и сестрами, а ее содержимое окажется перед ними.