Как ограничить количество элементов, полученных в dataProvider AS3

* Здравствуйте! Мне нужно заполнить только 100 элементов в dataProvider, который отображается в компоненте списка. даже если элементов больше 500 или даже 1000, мне нужно только 100 элементов, сначала все элементы с включенной камерой, а остальные заполнить, чтобы всего 100 были в DataProvider. Использование ActionScript 3.0 (Flash CC):

ОБНОВЛЕНИЕ: в основном, мне нужно следующее: у меня есть приложение видеочата во flash, поэтому, когда есть сотни пользователей, приложение становится медленным из-за компонента списка, заполняющего сотни элементов (пользователей), поэтому я хотел бы иметь не менее 100 пользователей в списке, отдающих приоритет пользователям, транслирующим живое видео. имеет ли это смысл? :) спасибо – Алекс только что отредактировал
*

Код:

function syncEventHandler(event:SyncEvent){
        list1.removeAll();

             for (var i in users_so.data){

                 if (users_so.data[i] != null)
                      {
                          var clientObj = users_so.data[i];
                //if user is streaming add it first then complete 100 with the rest.
                          list1.addItem({label:clientObj.UserName});
                      }


            }
    }

Спасибо, что нашли время для этого!


person Alex    schedule 09.02.2014    source источник
comment
это зависит от того, откуда поступают данные в идеале, если вы извлекаете эти данные с сервера (через GET/веб-службу/и т. д.), реализация сервера должна предоставить вам возможность запрашивать только 100 элементов для начала. Если это не вариант (у вас нет контроля над серверной частью), вы можете иметь два объекта DataProvider. Один будет извлекать полные данные (например, все 500 или 100), а другой будет хранить ссылки только на 100 записей. На самом деле, как только вы извлечете данные, вы можете сохранить их в типизированном массиве объектов значений и обновить один DataProvider со 100 ссылками по мере необходимости.   -  person George Profenza    schedule 09.02.2014
comment
...похоже, нумерация страниц - это то, что вам нужно   -  person George Profenza    schedule 09.02.2014
comment
в основном, мне нужно следующее: у меня есть приложение видеочата во флэш-памяти, поэтому, когда есть сотни пользователей, приложение становится медленным из-за компонента списка, заполняющего сотни элементов (пользователей), поэтому я хотел бы иметь не менее 100 пользователей на список, отдающий приоритет пользователям, транслирующим живое видео. имеет ли это смысл? :) Благодарность   -  person Alex    schedule 10.02.2014
comment
имеет смысл. у вас, вероятно, есть событие подключения/отключения, когда вы должны добавить/удалить элемент из списка (а не удалять и добавлять их все). вы можете использовать массив, чтобы получить их все, а затем добавить/удалить только то, что изменилось. Я предполагаю, что проблема заключается в том, что компонент списка недействителен. На стороне, возможно, попробуйте другие компоненты (например, минимальные компоненты). Кроме того, в целом хорошо держать вещи разделенными (используя потоки/работники as3), чтобы вы не блокировали/замораживали пользовательский интерфейс. Посмотрите эти видеоруководства (1,2).   -  person George Profenza    schedule 10.02.2014
comment
Привет Джордж, на самом деле пользователи хранятся в удаленном общем объекте, который отправляется всем клиентам swf, и каждый клиент имеет функцию для заполнения общего объекта в компонент списка, я искал компонент для работы с этим, но безуспешно, также Я понятия не имею, как это сделать, например, просто добавить пользователя, если его еще нет в списке, или просто удалить пользователя, который вышел из системы, не заполняя весь список все время. Спасибо!   -  person Alex    schedule 10.02.2014


Ответы (1)


Я не уверен в ваших намерениях, но вы можете ограничить количество элементов в поставщике данных, внедрив глобальный счетчик следующим образом:

function syncEventHandler(event:SyncEvent)
{
    list1.removeAll();
    counter = 0;
    for (var i in users_so.data)
    {

        if (users_so.data[i] != null)
        {
             if(counter < 100)
             {
                 var clientObj = users_so.data[i];
                 //if user is streaming add it first then complete 100 with the rest.
                 list1.addItem({label:clientObj.UserName});
                 counter ++;
             }
             else
             {
                 break;
             }
        }

    }
}
person user3277549    schedule 09.02.2014
comment
Привет, я попробовал ваш код, но некоторые элементы отсутствуют, например: if (clientObj.webcamLive == true){ list1.addItem({label:clientObj.UserName}); counter++ } - person Alex; 09.02.2014