2011-10-19 32 views
0

ExtJSで新しいオブジェクトを作成しようとすると問題が発生します。最初に新しいオブジェクトを作成し、同じクラスの別のオブジェクトを作成します。そのクラスでは、私は「フォーム」と呼ばれるプロパティを持っています。このプロパティの型は '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); 
    } 
}); 

コードは単純です。私が最初のオブジェクトを作成するとき、ok。 2番目のオブジェクトを作成すると、コンソールに最初のオブジェクトが表示されます(else条件を入力)。これは、クラスのプロパティとしてオブジェクトがある場合にのみ発生します。これはExtのバグかもしれませんし、新しいオブジェクトを作成するたびに、クラス内のすべてのオブジェクトを本当にクローンする必要がありますか?

答えて

2

initComponentにフォームを作成する必要があります。これは、ExampleClassインスタンスごとに個別のインスタンスを作成する必要があるためです。あなたの現在の実装で

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

Ext.defineだけ一度呼び出されているので、唯一 formオブジェクトは、そこにあります。その後、instantionionでは、既存のオブジェクトへの参照がインスタンスに渡されます。

+0

言い換えれば、OPがフォームを作成した方法では、それは 'ExampleClass'のプロトタイプに格納され、すべてのインスタンスで共有されます。このバグを避けるために、文字列、数値、ブール値ではないプロトタイプにオブジェクトを追加することはありません。 –

+0

私は今すべての私のアプリでこれをやっています。文字列、数値またはブール値ではないすべてのプロパティを削除します。答えをありがとう。 –

+0

これはバグではなく、JavaScriptでの継承の仕組みです。簡単な例はhttp://jsfiddle.net/GseUG/を参照してください。 (しかし、私が頻繁に遭遇したのは一般的な落とし穴です) – user123444555621

関連する問題