Как изменить источник данных в сетке данных YUI после создания - PullRequest
6 голосов
/ 24 июня 2009

Я использую Yahoo DataTable , для которого API здесь .

У меня возникают трудности с изменением данных после однократного рендеринга сетки. Я использую jQuery для получения данных через AJAX или с острова данных на стороне клиента, и мне нужно поместить их обратно в сетку.

В API-интерфейсе DataTable нет метода setDataSource, и изменение dataSource.liveData не обновляет сетку.

 // does not work
 dataTable.dataSource.liveData = [ {name:"cat"}, {name:"dog"}, {name:"mouse"};

Примером, на котором я основываю свой код, является basic LocalDataSource пример .

Как я могу обновить источник данных без необходимости полностью воссоздавать таблицу. Я НЕ хочу использовать источники данных YUI, которые делают асинхронные вызовы. Мне нужно знать, как я могу сделать это «вручную».

Ответы [ 4 ]

5 голосов
/ 01 августа 2009

Вы были на правильном пути, вы просто забыли сообщить источнику данных об отправке данных в таблицу данных. Предполагая, что вы используете LocalDataSource и хотите заменить данные в таблице тем, что находится в источнике данных, после замены liveata вы просто делаете

dataTable.getDataSource().sendRequest(null,
  {success: dataTable.onDataReturnInitializeTable},
  dataTable);

Также см. Другие onDataReturnXXX методы DataTable в справочнике по API. Вы можете добавлять новые данные вместо замены и т. Д.

3 голосов
/ 08 марта 2010

Я просто хотел добавить, что вы можете сохранить нумерацию страниц, если передаете вызов getState () в свойстве аргумента.

dataTable.getDataSource().sendRequest(null,
    {
        success: dataTable.onDataReturnInitializeTable,
        argument: dataTable.getState()       
    }
);
0 голосов
/ 01 ноября 2014

На самом деле, все, что я сделал, чтобы заставить его работать, это следующие две строки кода (и моя была возвращена из ajax, немного отличающаяся от OP) ...

dataTable.dataSource.liveData = eval(o.responseText);
dataTable.load({});

потому что, если вы прочитаете, то, что делает datatable.load(), это то, что все предлагали назвать.

0 голосов
/ 25 июня 2009

Как я могу обновить источник данных, не восстанавливая таблицу полностью?

Вы имеете в виду, не используя "новое" утверждение? Если так, мне не приходилось делать это самостоятельно, но я часто использую YUI. Я заметил, что есть метод deleteRows, который можно использовать для удаления всех строк, от 0 до длины таблицы, а затем использовать addRows, который принимает буквенный массив, такой как ваш, и индекс, в данном случае, 0.

Вы пробовали это?

Редактировать: Взгляните на этот пример . То, что вы хотите сделать, определенно можно сделать. Таблица обновляется локально с заданным интервалом, используя метод setInterval (что не удивительно). Взглянув на то, что делает setInterval, вы можете увидеть, что он вызывает makeConnection для экземпляра источника данных. Похоже, что метод делает удаленный вызов, но это не обязательно.

Давайте рассмотрим пару строк из примера.

    // Set up polling
    var myCallback = {
        success: myDataTable.onDataReturnInitializeTable,
        failure: function() {
            YAHOO.log("Polling failure", "error");
        },
        scope: myDataTable
    }
    myDataSource.setInterval(5000, null, myCallback)

последняя строка может быть вызвана один раз (или по требованию, как вам нужно), а не с интервалом, переписав ее так:

myDataSource.makeConnection(null, myCallBack)

, который вызывает onDataReturnInitializeTable метод, который, я думаю, вы могли бы вызвать напрямую, что имело бы больше смысла.

В любом случае, просто следуйте примеру и выньте части, которые вам не нужны. В конечном счете, похоже, что метод onDataReturnInitializeTable является ключевым.

Надеюсь, это поможет.

...