【问题标题】:Is it possible to use the same form in two different windows in Extjs4?是否可以在 Extjs4 的两个不同窗口中使用相同的表单?
【发布时间】:2013-07-01 12:16:35
【问题描述】:

我有一个带有按钮的表格,用于添加新元素,并在行中添加另一个按钮来编辑元素。这些操作共享相同的表单,唯一的区别是在编辑模式下填写表单。当用户单击按钮时,会显示一个带有表单的新窗口。

我第一次单击按钮时,例如,添加一个新元素,工作正常。显示表格。但是...如果我关闭窗口并尝试编辑用户,则会出现一个没有内容的额外窗口和错误 "TypeError: b is null" 是不是表单定义有问题?可能form istance被窗口删除了?

我在 var 中定义了一个表单:

var formPanel =  Ext.create('Ext.form.Panel',{
     extend: 'Ext.form.Panel',
     id: 'policyForm',
     ...

我在网格的 tbar 中有一个按钮来显示窗口,以便添加用户和行中的另一个按钮来编辑他。这是按钮的处理程序:

handler : function(){
    Ext.create('Ext.window.Window',{
        layout: 'fit',
        title: 'New Policy',
        items: [formPanel],
        width: 650,
        height: 500,
        id: 'myPolicyWindow'
    }).show();
}

【问题讨论】:

    标签: extjs extjs4 extjs4.2


    【解决方案1】:

    很可能是您在面板和窗口代码中设置的那些ids 导致您无法在不同的窗口中重用相同的表单。您应该尽量避免在 Ext 组件上使用 id 属性,因为 ID 应该是唯一的,它可能会导致类似这样的问题。将itemId 属性与Ext.ComponentQuery 结合使用,可以在不使用Ext.getCmp(compId) 的情况下获取对组件的引用。

    【讨论】:

    • 谢谢凯夫亨德。我解决了删除 id 的问题,定义了一个自定义表单,然后为我的窗口创建了不同的实例。我将不再使用 id 属性。不管怎样,如果你设置了一个带有 itemId 的元素,你怎么调用它来获取实例呢?
    • 您将需要使用组件查询来按关系导航组件。使用itemId 时,请在组件查询中使用# 登录:parentCmp.down('#childCmpId')。请参阅docs.sencha.com/extjs/4.2.1/#!/api/Ext.ComponentQuery 的文档。
    • 谢谢@kevhender。好像是 jquery :)
    【解决方案2】:

    我同意您不应该使用 ID。但是,实际问题可能是您所怀疑的:表单的实例正在被破坏。这是因为Ext.window.Window 的默认closeAction 是“destroy”,这也会清除所有子组件。要么将closeAction 更改为“隐藏”,要么创建表单面板的新实例以及窗口的新实例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多