Как изменить таблицу DataTable после ее создания

Я хотел бы изменить YUI DataTable по мере выполнения запросов ajax. Так, например, у меня есть 4 запроса ajax, запрашивающих вещи, выполнение которых занимает от 1 до 10 секунд. Я хотел бы начать построение таблицы после завершения запроса 1s и снова изменить таблицу каждый раз, когда завершается запрос ajax. Есть ли рекомендуемый способ сделать это в целом?

В частности, я хотел бы изменить способ форматирования столбца, чтобы отображать любые потенциальные ошибки, возникающие при обработке строки. Однако ошибка обрабатывается медленно, поэтому было бы полезно сначала отобразить данные, а затем добавить ошибки.

Большое спасибо за любую помощь!

Джейсон


person FurtiveFelon    schedule 10.02.2011    source источник


Ответы (1)


Я предполагаю, что ваши несколько запросов объединяют данные столбца. Я также предполагаю, что таблица является статической (не пейджинг или сортировка на стороне сервера).

  1. Настройте определение столбца для DataTable, чтобы включить все столбцы из всех источников.
  2. Создайте источник данных, указывающий на URL-адрес службы самого быстрого запроса.
  3. Создайте экземпляр DataTable с этим источником данных.
  4. Либо создайте больше источников данных для других служб, либо вызовите YAHOO.util.Connect.asyncRequest(...) для каждой другой службы.
  5. Обратные вызовы для каждого из этих запросов на обслуживание должны выполнять следующие действия:

(псевдокод впереди)

function callback(data) {
    var recordset = myDataTable.getRecordSet(),
        records = recordset.getRecords(),
        i, len, rec;

    for (i = 0, len = records.length; i < len; ++i) {
        rec = records[i].getData(); // will return an object literal with data info
        /* match the record object to the new data and update the record object */
    }

    recordset.setRecords(records);
    myDataTable.render();
}

Таким образом, каждый дополнительный сервис будет добавлять данные на уровне записи, после чего будет обновляться полный пользовательский интерфейс таблицы.

ХТН

person Luke    schedule 10.02.2011
comment
Эй, Люк, я не думаю, что вам нужно делать recordset.setRecords(records), я верю, что вы изменяете ссылки, поэтому, когда я сделал myDataTable.render(), он просто отображает новые данные. На самом деле, когда я сделал setRecord, он по какой-то причине фактически стер все данные (визуально)... - person FurtiveFelon; 11.02.2011
comment
Хороший звонок. setRecords не нужен. Не уверен, почему он стер это (очевидно, какое-то плохое кодирование от бедра), но в любом случае это спорно. - person Luke; 11.02.2011