此代码适用于Extjs 4.0.2a 但当转换为4.1时,它不再起作用并发出错误
Uncaught TypeError: Cannot call method 'query' of undefined
Ext.onReady(function() {
var panel = new Ext.Panel({
renderTo: divtag,
draggable: {
insertProxy: false,
onDrag: function(e) {
var el = this.proxy.getEl();
this.x = el.getLeft(true);
this.y = el.getTop(true);
},
endDrag: function(e) {
this.panel.setPosition(this.x, this.y);
}
},
title: 'Panel',
width: 200,
height: 100,
x: 20,
y: 20
});
});
答案 0 :(得分:3)
显然此版本的Ext中存在错误。即使您尝试使用默认D'n'D这样的面板,它也无法工作:
Ext.onReady(function() {
var panel = new Ext.Panel({
renderTo: 'divtag',
draggable: true,
title: 'Panel',
width: 200,
height:100,
x: 20,
y: 20
}); //panel.show(); });
});
我打算修改代码以按照您希望的方式工作,此代码应该可以工作:
Ext.onReady(function() {
var panel = new Ext.Panel({
renderTo: 'divtag',
draggable: {
insertProxy: false,
onDrag: function(e) {
var el = this.proxy.getEl();
this.x = el.getX();
this.y = el.getY();
},
endDrag: function(e) {
panel.setPosition(this.x,this.y);
},
alignElWithMouse: function() {
panel.dd.superclass.superclass.alignElWithMouse.apply(panel.dd, arguments);
this.proxy.sync();
}
},
title: 'Panel',
width: 200,
height:100,
x: 20,
y: 20
}); //panel.show(); });
});
作为旁注,我可能建议你不要这样做,因为你可以为你可以使用的面板定义你自己的DD,甚至更好的Ext已经定义了一个,所以你可以覆盖Ext面板使用默认Ext.util.ComponentDragger,或者在代码中,我建议你这样做:
Ext.override(Ext.panel.Panel, {
initDraggable: function() {
var me = this,
ddConfig;
if (!me.header) {
me.updateHeader(true);
}
if (me.header) {
ddConfig = Ext.applyIf({
el: me.el,
delegate: '#' + me.header.id
}, me.draggable);
// Add extra configs if Window is specified to be constrained
if (me.constrain || me.constrainHeader) {
ddConfig.constrain = me.constrain;
ddConfig.constrainDelegate = me.constrainHeader;
ddConfig.constrainTo = me.constrainTo || me.container;
}
me.dd = Ext.create('Ext.util.ComponentDragger', this, ddConfig);
me.relayEvents(me.dd, ['dragstart', 'drag', 'dragend']);
}
}
});
var panel = Ext.create('Ext.panel.Panel', {
id: 'test',
renderTo: 'divtag',
draggable: true,
floating: true,
title: 'Panel',
width: 200,
height:100,
x: 20,
y: 20
});
面板覆盖中initDraggable
函数的代码取自当前稳定版本的Ext.window.Window.initDraggable方法。
答案 1 :(得分:2)
我能够在4.1中使用它:你必须在renderTo元素的id周围添加引号,例如:
renderTo : 'divtag',
没有引号,它正在寻找一个名为divtag的未定义变量。
一旦我跑了,我没有错误,然后我只是panel.show()
来渲染它。
答案 2 :(得分:0)
只是一个建议:一个Window组件是一个专门的Panel,它有一个浮动mixin - 可能就是你所需要的。