我遇到了主题中描述的问题。
我有ExtJs应用程序。我的任务显示带有填充网格的弹出窗口。
默认情况下window.closable = false;
在控制器的某个地方,我已经定义了窗口,它看起来像是:
Ext.define('Return.controller.ViewportController', {
extend: 'Ext.app.Controller',
views:[
'ModalWindow',
'ProductsList'
],
stores:[
...,
'ProductsStore'
],
models:[
...,
'ProductsModel'
],
resultWindow: Ext.create('Ext.window.Window', {
itemId: 'popupWindow',
id: 'popupWindow',
title: 'Result List',
layout:'fit',
width: 900,
height: 600,
modal: true,
closable: false,
closeAction: 'hide',
items:[]
})
onPopupShow: function() {
// first add grid with store to popup window;
// then need to load data into ProductsStore;
// depending on values in store_stock column need to define
// if I should show close button for Window or not.
// By default button is invisible
var prodStore = Ext.getStore('ProductsStore');
this.resultWindow.add({xtype: 'ProductsList', border: true});
prodStore.load({
params: {
stock_locations_id: 1,
query: value
},
callback: function (result) {
var app = this;
if (result.length > 0) {
//make window closable
app.resultWindow.closable = (!prodStore.sum('stock'));
//show and update Layout
app.resultWindow.show().updateLayout();
Ext.getCmp('ProductsList').getView().refresh();
return;
}
//do smth else
}, scope: this
});
}
);
用户应该执行以下操作: 在popupShow中找到网格中的任何行,单击它。之后,将隐藏弹出窗口,并将选定的行添加到包含所有数据的父网格。
prodStore.sum('stock')
时它工作正常 - 表示列中所有值的总和大于零。
当'stock'
列中的所有值都为零时,用户应该只能关闭窗口。
当我调试那段代码时,window将closable属性设置为true并且可以显示。但在正常运行中 - 没有。
在尝试检入控制台Ext.getCmp('popupWidow').closable
的同时,它会根据需要返回true
。
我想应该更新布局。我在窗口显示后立即这样做。但不幸的是。
这里有什么其他方法适用?
提前致谢。
答案 0 :(得分:0)
在resultWindow
函数中创建callback
对象,并在初始化时设置closable
属性。
所以,你可以这样做:
Ext.define('Return.controller.ViewportController', {
extend: 'Ext.app.Controller',
...
resultWindowConfig: {
itemId: 'popupWindow',
id: 'popupWindow',
title: 'Result List',
layout:'fit',
width: 900,
height: 600,
modal: true,
closable: false,
closeAction: 'hide',
items:[]
},
onPopupShow: function() {
...
scope: this,
callback: function (result) {
var app = this;
if (result.length > 0) {
//make window closable
app.resultWindowConfig.closable = (!prodStore.sum('stock'));
var resultWindow = Ext.create('Ext.window.Window', app.resultWindowConfig);
//If you want to set resultWindow as a property of the app object just do app.resultWindow = resultWindow;
resultWindow.show();
...
return;
}
});
});
如果您查看Ext.window.Window文档,则可以看到此属性没有设置功能,这意味着您只需更改此属性即可更新用户界面。