我创建了一个这样的窗口:
_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。然后尝试访问undefined的dom属性,抛出我上面提到的错误。
这就是我迷失的地方,因为正如你所看到的,当我创建窗口时,我将一个对象(aBody)传递给renderTo属性。
任何想法??
答案 0 :(得分:0)
它与布局有关。布局“合适”似乎有效。