Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 22.12.2010, 12:45
Tie Tie вне форума
Интересующийся
Отправить личное сообщение для Tie Посмотреть профиль Найти все сообщения от Tie
 
Регистрация: 15.12.2010
Сообщений: 11

Не работают методы и свойства MixedCollection
Добрый день.
Возникла следующая проблема. Есть окно с bbar'ом, в котором есть несколько ButtonGroup. С помощью
Ext.getCmp('buttongroup_in_bbar_id').items

получаю объект типа MixedCollection, в котором, по идее, должны содержаться все кнопки данного ButtonGroup. Проверял с помощью console.log - в Firebug все отображается, кнопочки есть, свойство length равняется количеству кнопок, все методы объекта MixedCollection присутствуют. Однако попытка из кода вызвать метод first() или last() выдает "undefined", а обращение к свойству length выдает значение "0".
Подскажите, почему не работает, и что можно сделать.
Ответить с цитированием
  #2 (permalink)  
Старый 22.12.2010, 13:31
Аватар для Ex_Soft
Профессор
Отправить личное сообщение для Ex_Soft Посмотреть профиль Найти все сообщения от Ex_Soft
 
Регистрация: 19.12.2009
Сообщений: 164

Сообщение от Tie Посмотреть сообщение
Однако попытка из кода вызвать метод first() или last() выдает "undefined"
/me думает: гм... Типо - работает:
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());
});

Сообщение от Tie Посмотреть сообщение
а обращение к свойству length выдает значение "0"
Хотя у Ext.util.MixedCollection официально length нЭт...

Что-то Вы недоговариваете...
__________________
"Helo, word!" - 17 errors 56 warnings

Последний раз редактировалось Ex_Soft, 22.12.2010 в 13:36.
Ответить с цитированием
  #3 (permalink)  
Старый 22.12.2010, 16:20
Tie Tie вне форума
Интересующийся
Отправить личное сообщение для Tie Посмотреть профиль Найти все сообщения от Tie
 
Регистрация: 15.12.2010
Сообщений: 11

Да, похоже, действительно, недоговариваю.
Попробовал Ваш код - работает. Попробовал сделать окно ещё одно с 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.

Последний раз редактировалось Tie, 23.12.2010 в 12:57.
Ответить с цитированием
  #4 (permalink)  
Старый 23.12.2010, 13:31
Tie Tie вне форума
Интересующийся
Отправить личное сообщение для Tie Посмотреть профиль Найти все сообщения от Tie
 
Регистрация: 15.12.2010
Сообщений: 11

С проблемой разобрался. console.log просто срабатывает раньше, чем генерируются кнопки в buttonGroup. Поэтому при вызове console.log("first()=\"%s\"",qqq.first().toString( )) из Ext.onReady показывает, что qqq.first() is undefined.
Если же повесить кнопку в окне, и вызывать console.log оттуда, то всё работает. Соответственно, и работать с MixedCollection можно как угодно.

Спасибо Ex_Soft'у, без него бы я дольше до этого доходил.
Ответить с цитированием
Ответ


Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Регулярные выражения работают через раз San4ezy Общие вопросы Javascript 5 05.10.2010 01:50
Как при чтении или записи свойства объекта вызывать функцию danik.js Общие вопросы Javascript 3 16.09.2010 17:57
Как различить методы и свойства? возжаждавший Элементы интерфейса 59 12.04.2010 08:33
Не работают многие разделы учебника Leax Сайт Javascript.ru 21 13.01.2010 16:38