2012-03-27 18 views
2

を作成:XTYPEは、私がボタンを持っている場合、次のようにextjs4において同じID

Ext.define('Pandora.view.MyButton', { 
extend: 'Ext.button.Button', 
alias: 'widget.mybutton', 
text: 'click me', 
id: 'butid' 

})。

次のように私は、ビューポートでそれを使用する場合:

    { 
         xtype: 'panel', 
         id: 'panelid', 
         title: 'One tab', 
         html: '<p>what is this </p>' 
        }, 
        { 
         xtype: "mybutton" 

        }, 
        { 
         xtype: "mybutton" 
        } 

これは、(W3C推奨ではありません)同じIDを持つ2つのボタンを作成し、それは奇妙な行動を作り出すことができます。アプリケーションで同じボタンを複数回再利用するには、idを指定しないでxtypeを使用することをお勧めします(この場合、Extjは独自のボタンを作成します)。

答えて

5

これは、同じIDを持つ2つのボタンが作成されます

ExtJS4ドキュメントからクラス

Ext.define('Pandora.view.MyButton', { 
    extend: 'Ext.button.Button', 
    alias: 'widget.mybutton', 
    text: 'click me', 
    id: 'butid'  <========= 
}); 

を作成する際に、IDの設定をハードコードしているので、はい、これはあなたの状況についても同様です。

このIDはの要素IDとしても使用されることに注意してくださいこの コンポーネントのページにレンダリングされるHTML要素を含むこれにより、idベースのCSSルールを記述して、 のこのコンポーネントの特定のインスタンスを一意にスタイル付けし、このコンポーネントのIDを親として使用して サブエレメントを選択することができます。

参考:http://docs.sencha.com/ext-js/4-0/#!/api/Ext.button.Button

+0

から自分のIDを削除することができます。第2に、同じidを持つ2つの要素を持つ単純なHTMLページがある場合、最初のものだけが動作します(getElementByIdが参照します)。 Extjsは同じDOM内の複数のIDをどのように管理していますか? – user1296632

+0

さて、W3C標準に従わないのは、重複したコンポーネントをレンダリングするときにフレームワークがIDを生成させないようにすることです。コンポーネントはCSSセレクタを使用してアクセスすることができ、コンテナ固有のプロパティ 'itemId' – jthurau

+0

上記のように、開発者はすべてのコンポーネントに異なるIDを提供する責任があります。そうしないとidを指定せず、ExtJSはW3C標準を知っていますExt.id()関数を使用する各コンポーネントの一意のID –

0

IDを使用すると、2つのページ1に、彼らはDOMのidと1対1にマッピングされていないことを意味。したがって、ハードコードされたIDを持つために再利用されるクラスを定義することはできません。あなたはそれをあなたが

// You should also pass in a root component to start the search from 
// but it's optional 
var buttons = Ext.ComponentQuery.query('mybutton', root); 

探しているXTYPEを渡し、あなたのクラスの使用Ext.ComponentQuery.queryのすべての要素を見つける必要がある場合は今、あなたはあなたがExtJSには、W3C標準に従うされていない意味クラス定義

関連する問題