我创建一个这样的窗口:
_target = new Ext.Window({
layer: 'top',
width: _width,
height: _height,
constrainTo: aBody,
constrain: true,
renderTo: aBody,
autoScroll: true,
flex: 1,
modal: (targetParams.Modal != undefined) ? targetParams.Modal : false,
resizable: (targetParams.Resizable != undefined) ? targetParams.Resizable : true,
minimizable: (targetParams.Minimizable != undefined) ? targetParams.Minimizable : true,
maximizable: (targetParams.Maximizable != undefined) ? targetParams.Maximizable : true,
closable: (targetParams.Closable != undefined) ? targetParams.Closable : true,
maximized: _maximized,
minimzed: _minimized,
isInFront: true
});
然后这样做:
_target.on("render", function (items) {
if (items.length > 0) {
this.show();
this.add(items);
this.doLayout();
var buttonText = targetParams.ButtonText || this.title;
createToolbarButton(this.id, buttonText, targetParams.UIConfigurationId);
} else {
_target.destroy();
}
});
问题出在这条线上this.show();
。在 4.0 上,这条线调用了这个函数
show: function() {
this.callParent(arguments);
this.performDeferredLayouts();
return this;
},
但在 4.1 上,同一行调用了另一个函数:
show: function(animateTarget, cb, scope) {
var me = this;
if (me.rendered && me.isVisible()) {
if (me.toFrontOnShow && me.floating) {
me.toFront();
}
} else if (me.fireEvent('beforeshow', me) !== false) {
me.hidden = false;
if (!me.rendered && (me.autoRender || me.floating)) {
me.doAutoRender();
}
if (me.rendered) {
me.beforeShow();
me.onShow.apply(me, arguments);
if (me.ownerCt && !me.floating && !(me.ownerCt.suspendLayout || me.ownerCt.layout.layoutBusy)) {
me.ownerCt.doLayout();
}
me.afterShow.apply(me, arguments);
}
}
return me;
},
下线试图做layout.renderChildren()
,然后它给出了一个错误。
我认为很明显创建的对象是不同的,但我没有在“升级 4.0 到 4.1”文档中看到这个问题。
所以我的问题是我必须做些什么才能完成这项工作?
在此先感谢您的帮助。
更新:
添加窗口后的应用程序结构如下所示:
ViewPort
North
...
West
...
Center
Window
Panel
Panel
Label
...
BorderSplitter
Panel
Label
...
Panel
List
South
...
我对代码进行了一些更改,它不再产生该错误。
_target.on("beforeRender", function (items) {
if (items.length > 0) {
_target.add(items);
_target.doLayout();
var buttonText = targetParams.ButtonText || _target.title;
createToolbarButton(_target.id, buttonText, targetParams.UIConfigurationId);
} else {
_target.destroy();
}
});
_target.show();
_target.toFront();
但是现在当我打电话时它会产生另一个_target.add(items);
。
此行的错误是“无法获取属性 'dom' 的值”
me.container = container.dom ? container : Ext.get(container);
我试图分析调用堆栈并找出它为什么会出现这个错误。当它调用这个函数时:
renderChildren: function () {
var me = this,
items = me.getLayoutItems(),
target = me.getRenderTarget();
me.renderItems(items, target);
},
其中“this”指的是窗口的布局对象,在我添加项目的位置,调用“getRenderTarget()”返回未定义。然后尝试访问undefined的dom属性,抛出我上面提到的错误。
这就是我迷路的地方,因为如您所见,当我创建窗口时,我将一个对象(aBody)传递给 renderTo 属性。
有任何想法吗??