我創建了一個窗口,像這樣:遷移從煎茶ExtJS的4.0到4.1的ExtJS
_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」文檔中解決的這個問題。
所以我的問題是我必須做什麼使這項工作?
在此先感謝您的幫助。
UPDATE:
該應用程序結構添加窗口會是這個樣子後:
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);
},
其中「這」指的是窗口的佈局對象,到了那裏我加入的項目,呼叫「getRenderTarget()」返回undefined。然後嘗試訪問未定義的dom屬性,拋出上面提到的錯誤。
這就是我迷失的地方,因爲如你所見,當我創建窗口時,我將一個對象(aBody)傳遞給renderTo屬性。
任何想法??
你能分享確切的錯誤嗎? 另外,爲什麼你在「渲染」中調用this.show()? –
錯誤是「對象不支持此屬性或方法'renderChildren()'」。我在渲染器中調用它只顯示窗口,以防在其中渲染任何項目。 –
使用此事件(beforeshow):http://docs.sencha.com/ext-js/4-1/#!/api/Ext.AbstractComponent-event-beforeshow 如果您不想要,請在事件中返回false顯示窗口。 –