Javascript ExtJs 4-当closable属性被动态更新时,如何更新Ext.window.window布局?

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:[

我面临主题中描述的一个问题。 我有一个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
    });
  }
);
用户应执行以下操作: 在弹出窗口中查找网格中的任何行时,单击该行。之后,弹出窗口将被隐藏,所选行将与所有数据一起添加到父网格

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。我将尝试应用您的解决方案,并告知结果。我想,它应该会有帮助。是的,它对我有用。在这种情况下,它甚至更好,因为我们每次加载结果产品列表时都会创建这个窗口。因此,不会存储以前的设置。