2010-08-07 2 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

Отображается ли она в точке, на которую вы вызываете функцию загрузки? –

+0

Да, нагрузка запускается другой кнопкой на странице. –

ответ

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() способ каким-то причинам? Или вы пытаетесь добавить несколько разных функций и по ошибке выбрали имя существующего метода?

EDIT: Должен был заметить это ранее, но конфигурация tbar недоступна после рендера как действительного свойства. Из документов для tbar: «Чтобы получить доступ к верхней панели инструментов после рендера, используйте getTopToolbar»

+0

Хмм ... Это действительно унаследованный код, и у меня есть 0 опыта ExtJS, поэтому я надеялся на действительно легкое решение. Я думаю, однако, что у меня есть оба ваших простых решения, я просто их оставил. Я обновлю свое оригинальное сообщение, чтобы это отразить. –

+0

О, и я честно не знаю, что происходит с методом загрузки - я знаю, что он не запускается до тех пор, пока не будет вызван. –

+0

Разве вы не должны называть суперкласс * после * определять материал с помощью Ext.apply? – ob1

Смежные вопросы