2011-10-19 46 views
0

我尝试在ExtJS中创建新对象时遇到了问题。首先我创建一个新对象,然后创建同一个类的另一个对象。在那个班里,我有一个名为'form'的财产。这个属性的类型是'object'。我将在下面显示:使用ExtJS创建对象时出错

Ext.define('ExampleClass', { 
    extend: 'Ext.Component', 
    form: { 
     last: null 
    }, 
    initComponent: function() { 
     if(this.form.last == null) { 
      this.form.last = this; 
     } 
     else { 
      console.log(this.form); 
     } 
     this.callParent(arguments); 
    } 
}); 

的代码很简单。当我创建第一个对象时,确定。当我创建第二个对象时,控制台显示第一个对象(输入else条件)。只有当我有一个对象作为类的一个属性时才会发生这种情况。这可能是Ext的一个bug,或者我真的需要在每次创建新对象时克隆类中的所有对象?

回答

2

您需要在initComponent中创建表单,因为您需要为每个ExampleClass实例分别创建一个实例。

initComponent: function() { 
    this.form = { 
     last: null 
    }; 
    ... 

在你目前的实现中,只有一个form对象,因为Ext.define只调用一次。然后在实例上将对现有对象的引用传递给实例。

+0

换句话说,OP创建窗体的方式,它存储在'ExampleClass'的原型中,并被所有实例共享。我从不向原型添加任何不是字符串,数字或布尔值的对象以避免此错误。 –

+0

我现在正在我的所有应用程序中执行此操作。删除所有不是字符串,数字或布尔值的属性。感谢你的回答。 –

+0

这不是一个错误,它只是继承在JavaScript中的工作方式。参见http://jsfiddle.net/GseUG/一个简单的例子。 (但是,这是我经常遇到的常见错误) – user123444555621