2010-08-07 66 views
0

我有上有一個工具欄的網頁上,被添加通過應用像這樣(有刪節代碼,很多不相干的東西在原來的):ExtJS的:無法調用findById)的申請(添加工具欄

var obj = Ext.extend(Ext.Panel,{ 
    initComponent:function(){ 
     Ext.apply(this,{ 
      layout:'card', 
      itemId:'contactDetails', 
      border:false, 
      activeItem:0, 
      tbar: new Ext.Toolbar({ 
       items:[{text:'New'},{text:'Edit',id:'editButton'}] 
      }) 
     }); 
     obj.superclass.initComponent.apply(this); 

    }, load:function() { 
     this.tbar.findById('editButton').toggle(false); //Javascript error here about findById not being a function. 
    } 
    }); 

以上可能在語法上也不正確。這是在我的代碼中(至少從沒有JavaScript錯誤除了大的拋出)。

+0

是否在您調用加載函數的位置呈現它? – 2010-08-07 22:01:19

+0

是的,加載是由頁面上的另一個按鈕觸發的。 – 2010-08-07 22:05:45

回答

0

首先,你不必重寫initComponent只是爲了提供默認配置。這將同樣的方式工作和更簡單:

var obj = Ext.extend(Ext.Panel,{ 
    layout:'card', 
    itemId:'contactDetails', 
    border:false, 
    activeItem:0, 
    tbar: new Ext.Toolbar({ 
     items:[{text:'New'},{text:'Edit',id:'editButton'}] 
    }) 
}); 

這也可能會解決你的問題 - 因爲你在你的代碼重寫initComponent,(抓抓我以前的答案,我誤解你的代碼。)您必須在您的方法中調用超類initComponent,否則事情將不起作用。當重寫initComponent你的代碼,你應該這樣做:

initComponent: function(){ 
    Ext.apply(this,{ 
     layout:'card', 
     itemId:'contactDetails', 
     border:false, 
     activeItem:0, 
     tbar: new Ext.Toolbar({ 
      items:[{text:'New'},{text:'Edit',id:'editButton'}] 
     }) 
    }); 
    obj.superclass.initComponent.apply(this, arguments); 
} 

而且,你實際上覆蓋出於某種原因,現有Panel.load()方法?還是你想添加一些不同的功能,並錯誤地選擇了現有的方法名稱?

編輯:早該注意到這一點,但tbar配置在渲染後不可用作爲有效屬性。從tbar的文檔:「要訪問渲染後的頂部工具欄,請使用getTopToolbar

+0

嗯...這實際上是繼承代碼,我有0 ExtJS的經驗,所以我希望有一個非常簡單的解決方案。不過,我想,我已經涵蓋了你的兩個簡單解決方案,我只是將它們排除在外。我會更新我原來的帖子以反映這一點。 – 2010-08-08 00:37:12

+0

哦,我真的不知道負載方法是怎麼回事 - 我知道直到調用它纔會運行。 – 2010-08-08 00:41:38

+0

在使用Ext.apply定義內容之後,您不應該調用超類*嗎? – ob1 2010-08-08 08:05:08