2012-03-14 17 views
2

コンポーネントを初期化するときに関数内で項目を作成しようとしています。初期化関数内でオブジェクトの項目を定義する

は、次のことを考えてみましょう:

Ext.define('mobi.form.Login',{ 
    extend:'Ext.form.Panel', 
    config:{  
     items: [{ 
     xtype: 'textfield', 
     name: 'Name', 
     label: 'Name' 
     }] 
}); 
Ext.application({ 
    viewport: { 
     layout:'fit'   
    }, 
    launch: function(){ 
     Ext.Viewport.add(Ext.create('mobi.form.Login')); 
    } 
}) 

私はmobi.form.logininitialize(またはものは何でも私が終わっ私が指定した設定を記述するために使用することができます)上で動作する関数からその設定を生成するために取得しようとしています。

私は煎茶タッチ2は、これは私がそれをやっていた場合、それがどのように見えるか、多かれ少なかれある constructorを持っており、 initialize機能が、それらの両方が arguments=[](例えば空の配列)を持っているように見える

知っ

ExtJSの4.xの:

Ext.define('mobi.form.Login',{ 
    extend:'Ext.form.Panel', 
    initComponent:function(config){ 
     config=Ext.apply({}.config,{});//make sure config exists  
     config.items= [{ 
      xtype: 'textfield', 
      name: 'Name', 
      label: 'Name' 
     }] 
    Ext.apply(this, config); 
    this.callParent(arguments); 
    } 
}); 
+0

本当にこれを実行したかったら、あなたは 'コンストラクタ'でそれを行います。これはExt.create()に渡す設定を 'initComponent'にリンクするだけなので、上で使用しているのとまったく同じコードを使うことができます。しかし、問題は、なぜあなたはこれをしたいと思いますか? configシステムを2.xでできるだけ柔軟にしたいので、 'config'ブロックを導入しました。これでinitComponentは必要なくなりました。どのような状況で 'config'を使用することはできませんか? – rdougan

+0

コンストラクタには引数がありませんが、それは奇妙ですか? Ext.define内のconfigは 'this'をパネルのスコープとして参照することはできません。つまり、フォーム上でthis.reset()を実行するだけのコントローラを定義する必要があります。 Mitchell Simoensには、彼のグリッド拡張でやろうとしていることに似たものがあります(私は思っています)。 https://github.com/mitchellsimoens/Ext。ux.touch.grid/blob/master/Ext.ux.touch.grid/View.jsしかし、彼がやっていることのどれもドキュメントで見つけることができません(私が盲目でない限り)。 – Alex

+0

私の頭の上からもう1つの例は、ajax呼び出しを行うフォームを定義して、init(フォームのために楽しい)でその設定を取得することです。 – Alex

答えて

2

をパネル項目を作成手動で初期化する呼び出す必要はありませんこれを行うには、constructorまたはinitializeを使用できます。

同期ロジック用に使用するコンストラクタで、コンポーネントが初期化される前に高速化されます。あなたはコンストラクタを介して、第1引数に設定にアクセスすることができます。

Ext.define('MyComponent', { 
    extend: 'Ext.Component', 

    constructor: function(config) { 
     console.log(config); 

     this.callParent([config]); 
    } 
}); 

Ext.application({ 
    launch: function(){ 
     Ext.create('MyComponent', { test: 1 }) 

     // Will log out: 
     // { 
     //  test: 1 
     // } 
    } 
}); 

あなたは常には、コンストラクタ内config/argumentscallParentにする必要があります覚えておいてください。他の状況で

、あなたは結局設定のが...初期化されていると呼ばれるinitializeを使用する必要があります。 :)リスナーを追加するために、これを内部的に多く使用しています。

initialize: function() { 
    this.on({ 
     ... 
    }); 
} 
0

は、次を使用します。

Ext.apply(this, { 
    items: [ 
.... 
    ] 
}); 
+0

これは私のExtJSの例でも見当たりませんでした。その機能の中で私はそれを呼び出すべきですか?オブジェクト設定を 'this'にマージするだけで、既に設定されているeveythingがあれば、正確には動作しません。 – Alex

+0

それはうまくいくはずです。あなたのサンプルでいくつかの終わりのブラケットが不足しているが、私はそれがタイプミスだと思う。 Ext.applyを実行した後でparentを呼び出す前にitems配列内にあるものをログに記録しようとしましたか? – sha

+0

ええ、多分質問そのものが不明で、私が下部にしている擬似コードは、touchComponentで再現したいものです。私の知る限りでは、initComponent関数はSenchaタッチには存在しません。私はそれを行うために使用できる関数を探しています。そして、うまくいけば、その例: – Alex

0

は、あなたがこれに似た何かを試してみましたか?私はちょうどExt.createに設定オブジェクトを渡していますが、今はそれをテストすることはできません。パラメータなどの項目にかかる1、あなたにも、独自の機能で、このスニペットを貼り付けできhttp://docs.sencha.com/touch/1-1/#!/api/Ext-method-create

Ext.Viewport.add(Ext.create(
    { 
     xtype: 'mobi.form.Login', 
     items: [ /*A list of items*/ ] 
    } 
)); 

を参照してください。これがあなたの問題を解決することを願っています!

2

あなたはそれがすでにコンストラクタによって行われ、この関数を呼び出すときにthis.itemsを使用してアイテムデータにアクセスすることができますし、あなたがしたい場合があり

Ext.define('mobi.form.Login',{ 
    extend:'Ext.form.Panel', 
    config: { 
     items: [] 
    }, 

    initialize : function() 
    { 
     this.items = [Ext.create({ 
      xtype: 'textfield', 
      name: 'Name', 
      label: 'Name' 
     })]; 

     this.callParent(); 
    } 
}); 

Ext.application({ 
    viewport: { 
     layout:'fit'   
    }, 
    launch: function(){ 
     Ext.Viewport.add(Ext.create('mobi.form.Login')); 
    } 
}) 
+0

@Alexあなたは私にあなたが欲しいものを教えてもらえますか?それを間違って理解する? –

+0

種類。正確に私が欲しかったのはrdougansの答えを見てください:) – Alex

関連する問題