2012-03-27 49 views
2

在extjs4如果我有一個按鈕如下:的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" 
        } 

這將創建一個相同的ID兩個按鈕(這是不是W3C推薦),它可以產生怪異的行爲。爲了在應用程序中多次重複使用相同的按鈕,建議使用xtype而不提供id(在這種情況下,Extjs將創建它自己的)。

回答

5

這將創建一個相同的ID兩個按鈕

是因爲你是從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

你的意思是ExtJS的不繼W3C標準中刪除您的ID。其次,如果你有簡單的html頁面和兩個具有相同id的元素,那麼只有第一個元素有效(被getElementById引用)。 Extjs如何在同一個DOM中管理多個ID。 – user1296632 2012-03-27 23:14:05

+0

好吧,你會是一個沒有遵循W3C標準的人,因爲在渲染重複組件時不讓框架生成id。可以使用css選擇器訪問組件,也可以使用容器特定的屬性'itemId' – jthurau 2012-03-28 04:11:57

+0

是的,如上所述,它的開發者有責任爲每個組件提供不同的id,否則不指定id,ExtJS知道W3C標準,所以它會創建使用Ext.id()函數的每個組件的唯一標識 – 2012-03-28 07:10:09

0

標識意味着你不能有兩個在一個頁面上,它們被映射1比1與DOM的ID。因此,您無法定義將要重用的類以具有硬編碼的ID。如果你需要找到通過它你要找的的xtype類使用Ext.ComponentQuery.query的所有元素

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

現在你可以從類定義