2015-08-20 55 views
0
  1. 我創建一個複選框動態(基於條件)「創建複選框」按鈕,並在面板中添加此複選框。動態創建複選框沒有得到按鈕點擊檢查ExtJS

  2. 根據我的情況,只有1個複選框將被添加到面板中,它的項目ID將是「a1」。

  3. 當點擊另一個按鈕「checkedcheckbox」複選框應該被選中,但它沒有。當我通過按鈕單擊itemid獲取此複選框時,它顯示在開發人員工具中未定義。如果我通過面板項目獲取它,那麼它不顯示undefine,但複選框不檢查。

問題

  1. 爲什麼複選框顯示不確定,如果我得到它的itemId?
  2. 爲什麼複選框沒有被選中,如果我通過面板項目。它應該通過直接通過itemid和麪板項目獲得兩種方式。

我的帳戶在sencha fiddler有一些問題,這就是爲什麼我可以爲你創建一個提琴手。

代碼

Ext.onReady(function() { 
      var window = new Ext.Window({ 
       id: 'grdWindow', 
       width: 400, 
       height: 500, 
       title: 'Grid Samples', 
       items: [ 
        { 
         xtype: 'button', 
         text: 'Create checkbox', 
         handler: function() { 

          var obj1 = [ 
           { a: 1}, 
           { a: 2}, 
           { a: 3}, 
           { a: 4} 
          ]; 

          var obj2 = [ 
           { a: 1 }, 
           { a: 5 } 
          ]; 

          var i = 1; 
          var panel = Ext.getCmp('pnlTesting'); 
          Ext.each(obj1, function (ob1) { 
           Ext.each(obj2, function (ob2) { 
            if (ob1.a == ob2.a) { 
             panel.add({ 
              items:[ 
               { 
                xtype: 'checkbox', 
                itemId: 'a'+i 
               } 
               ] 
             }); 
             return false; 
            } 

           }); 
          }); 
         } 
        }, 
        { 
         xtype: 'panel', 
         id: 'pnlTesting', 
         height: 100, 
         renderTo: Ext.getBody() 
        }, 
        { 
         xtype: 'button', 
         text: 'checkedcheckbox', 
         handler: function() { 

          Ext.getCmp('pnlTesting').items.items[0].items.items[0].checked = true; 

          //Ext.getCmp("a1").checked = true; 
          //Ext.getCmp('pnlTesting').doLayout(); 
         } 
        } 
       ] 
      }).show(); 
     }); 

回答

0

的問題是,如果你想改變複選框的狀態,你應該用setValue(true)而不是checked=true做到這一點。

{ 
    xtype: 'button', 
    text: 'checkedcheckbox', 
    handler: function (btn) { 
     Ext.getCmp('pnlTesting').items.items[0].items.items[0].setValue(true);       
    } 
} 

而且也,這是獲得組件的醜陋的方式,我down()及其itemId

Ext.getCmp('pnlTesting').down('#a1').setValue(true); 

PD得到它:你應該提高這個選擇,因爲使用idgetCmp()是不是一個好練習ExtJS。

+0

是。現在它可以工作。它應該是setValue(true)而不是checked = true。但checked = true也有效。我用過很多次。不要爲什麼它不在這裏工作。如果你知道,你能告訴我理由嗎? –

2

我建議學習的.up().down().prev().next().query()

他們是強大的工具,通過在你的對象結構的每個組件導航無需處理特殊項ID的使用。您還可以通過配置選項獲取部件,如component.query('button[name="mybutton"]')

我做了一個(非常)小的例子在煎茶撥弄你的要求:https://fiddle.sencha.com/#fiddle/sii

+0

感謝您的建議。 checked = true時出錯。我必須使用setValue(true)並且它可以工作。但有時我使用checked = true並且它有效。不知道爲什麼它不在這裏工作。你能否告訴我,如果你知道的話。 –

+0

一旦我搜索了所有這些功能(上,下,上一級...),但完全不瞭解使用情況。你能否寄給我任何明確指出所有這些以便更好理解的鏈接。 –

+0

@PuneetChawla它不是來自Sencha,但可以幫助你理解這個功能:http://training.figleaf。com/tutorials/senchacomplete/chapter2/lesson5/2.cfm也可以在Sencha API中進行搜索。 – qmateub