Не работают методы и свойства MixedCollection
Добрый день.
Возникла следующая проблема. Есть окно с bbar'ом, в котором есть несколько ButtonGroup. С помощью Ext.getCmp('buttongroup_in_bbar_id').items получаю объект типа MixedCollection, в котором, по идее, должны содержаться все кнопки данного ButtonGroup. Проверял с помощью console.log - в Firebug все отображается, кнопочки есть, свойство length равняется количеству кнопок, все методы объекта MixedCollection присутствуют. Однако попытка из кода вызвать метод first() или last() выдает "undefined", а обращение к свойству length выдает значение "0". Подскажите, почему не работает, и что можно сделать. |
Цитата:
var a=new Ext.util.MixedCollection(); a.add("1st","1st"); a.add("2nd","2nd"); a.add("3rd","3rd"); console.log("length=\"%s\"",a.length.toString()); console.log("getCount()=\"%s\"",a.getCount().toString()); console.log("first()=\"%s\"",a.first().toString()); console.log("last()=\"%s\"",a.last().toString()); a.each(function(i) { console.log("\"%s\"",i.toString()); }); Цитата:
Что-то Вы недоговариваете... |
Да, похоже, действительно, недоговариваю.
Попробовал Ваш код - работает. Попробовал сделать окно ещё одно с bbar'ом - тоже все работает. На всякий случай рабочий код: var work_window= new Ext.Window ({ id: 'work_window', minWidth: 500, minHeight: 500, bodyStyle: { padding: '5px', 'background-color': '#FFFFFF' }, title: 'Window', bbar: { items: [ { xtype: 'buttongroup', id: 'buttongroup_in_bbar_id', items: [ { text: '1', id: 'q1', handler: function () { } }, { text: '2', id: 'q2', handler: function () { } }, { text: '3', id: 'q3', handler: function () { } } ] }] } }); Ext.onReady(function() { work_window.show(); var qqq = new Ext.util.MixedCollection; qqq = Ext.getCmp('buttongroup_in_bbar_id').items; console.log(qqq); console.log("first()=\"%s\"",qqq.first().toString()); }); В таком варианте действительно всё работает. У меня суть в том, что количество кнопок в ButtonGroup генерируется через аякс-запрос. Код того, что сделано у меня на данный момент: var work_window = new Ext.Window ({ id: 'work_window', minWidth: 500, minHeight: 500, bodyStyle: { padding: '5px', 'background-color': '#FFFFFF' }, title: 'work_window', bbar: { id: 'b_bar', items: [{ xtype: 'buttongroup', id: 'buttongroup_in_bbar_id' }] } }); function get_bottom_bar(param) { Ext.Ajax.request({ url: 'handler.php', params : { 'param': param, 'action' : '_get_count_buttons' }, success: function(response) { count_buttons= Ext.util.JSON.decode(response.responseText); create_bottom_bar(count_buttons); Ext.getCmp('b_bar').doLayout(); } }); } function create_bottom_bar (count_buttons) { for (var i = 1; i <= count_buttons; i++) { var new_button = { text: i, id: 'button'+i, handler:function(){ //заглушка } } Ext.getCmp('buttongroup_in_bbar_id').add(new_button); } } Ext.onReady(function() { work_window.show(); get_bottom_bar(999); var qqq = new Ext.util.MixedCollection; qqq = Ext.getCmp('buttongroup_in_bbar_id').items; console.log(qqq); console.log("first()=\"%s\"",qqq.first().toString()); }); handler.php на данный момент возвращает просто значение '15', без всяких обработок. Соответственно генерится 15 кнопочек с соотвествующими text и id. И вот в таком варианте console.log(qqq);вполне себе работает, а вот на console.log("first()=\"%s\"",qqq.first().toString());Firebug отвечает, что qqq.first() is undefined. |
С проблемой разобрался. console.log просто срабатывает раньше, чем генерируются кнопки в buttonGroup. Поэтому при вызове console.log("first()=\"%s\"",qqq.first().toString( )) из Ext.onReady показывает, что qqq.first() is undefined.
Если же повесить кнопку в окне, и вызывать console.log оттуда, то всё работает. Соответственно, и работать с MixedCollection можно как угодно. Спасибо Ex_Soft'у, без него бы я дольше до этого доходил. |
Часовой пояс GMT +3, время: 16:14. |