Я работаю с пользовательским интерфейсом, который имеет (YUI2) JSON DataSource , который используется для заполнения DataTable . Я хотел бы, чтобы при обновлении значения в таблице выполнялась простая анимация ячейки, значение которой изменилось.
Вот некоторые соответствующие фрагменты кода:
var columns = [
{key: 'foo'},
{key: 'bar'},
{key: 'baz'}
];
var dataSource = new YAHOO.util.DataSource('/someUrl');
dataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;
dataSource.connXhrMode = 'queueRequests';
dataSource.responseSchema = {
resultsList: 'results',
fields: [
{key: 'foo'},
{key: 'bar'},
{key: 'baz'}
]
};
var dataTable = new YAHOO.widget.DataTable('container', columns, dataSource);
var callback = function() {
success: dataTable.onDataReturnReplaceRows,
failure: function() {
// error handling code
},
scope: dataTable
};
dataSource.setInterval(1000, null, callback);
И вот что я хотел бы с этим сделать:
dataTable.subscribe('cellUpdateEvent', function(record, column, oldData) {
var td = dataTable.getTdEl({record: record, column: column});
YAHOO.util.Dom.setStyle(td, 'backgroundColor', '#ffff00');
var animation = new YAHOO.util.ColorAnim(td, {
backgroundColor: {
to: '#ffffff';
}
});
animation.animate();
};
Однако не похоже, что cellUpdateEvent
работает. Срабатывает ли ячейка, которая обновляется в результате обратного вызова setInterval
, cellUpdateEvent
?
Возможно, я не до конца понимаю, что происходит под капотом с DataTable
. Возможно, вся таблица перерисовывается каждый раз, когда запрашиваются данные, поэтому она не знает и не заботится об изменениях в отдельных ячейках? Это решение написать свою собственную функцию, чтобы заменить onDataReturnReplaceRows
? Может ли кто-нибудь объяснить мне, как я могу это сделать?
Edit:
После копания в datatable-debug.js, похоже, что onDataReturnReplaceRows
не будет запускать cellUpdateEvent
. Он вызывает reset()
на RecordSet
, который поддерживает DataTable
, который удаляет все строки; затем он заново заполняет таблицу свежими данными. Я попытался изменить его на onDataReturnUpdateRows
, но, похоже, это тоже не сработало.
Edit2:
Чтобы добиться желаемого контроля, я в итоге написал свой собственный список данных на основе <ul>
, который немного больше понимал проблему, которую я пытался решить. Ответ Дженни, приведенный ниже, должен помочь решить эту проблему для большинства других, поэтому я принял это как решение.