Javascript ExtJs 4-当closable属性被动态更新时,如何更新Ext.window.window布局?
我面临主题中描述的一个问题。 我有一个ExtJs应用程序。我的任务显示带有填充网格的弹出窗口。 默认情况下Javascript ExtJs 4-当closable属性被动态更新时,如何更新Ext.window.window布局?,javascript,extjs,extjs4,Javascript,Extjs,Extjs4,我面临主题中描述的一个问题。 我有一个ExtJs应用程序。我的任务显示带有填充网格的弹出窗口。 默认情况下window.closable=false 在我定义的控制器窗口的某个地方,它看起来像: Ext.define('Return.controller.ViewportController', { extend: 'Ext.app.Controller', views:[ 'ModalWindow', 'ProductsList' ], stores:[
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
});
}
);
用户应执行以下操作:
在弹出窗口中查找网格中的任何行时,单击该行。之后,弹出窗口将被隐藏,所选行将与所有数据一起添加到父网格
当prodStore.sum('stock')
-表示列中所有值的总和大于零时,它可以正常工作。
当'stock'
列中的所有值都为零时,用户应该能够关闭窗口
当我调试这段代码时,窗口将closable属性设置为true并可以显示。但在正常运行中-没有。
在尝试签入控制台Ext.getCmp('popupWidow').closable时,它会根据需要返回true
我想布局应该更新。我在橱窗展示后就这么做了。但不幸的是
这里还有什么其他适用的方法
提前感谢。在回调
函数中创建resultWindow
对象,并在初始化时设置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;
}
});
});
如果您查看文档,您可以看到此属性没有设置函数,这意味着您不能仅通过更改此属性来更新UI。Hm,也许您是对的。当然,我读过文档,是的,这个属性没有setter。我将尝试应用您的解决方案,并告知结果。我想,它应该会有帮助。是的,它对我有用。在这种情况下,它甚至更好,因为我们每次加载结果产品列表时都会创建这个窗口。因此,不会存储以前的设置。