Я работаю с пользовательским интерфейсом, который имеет (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
? Может ли кто-нибудь просветить меня о том, как я могу это сделать?
Изменить:
После изучения datatable-debug.js оказалось, что onDataReturnReplaceRows
не запускает cellUpdateEvent
. Он вызывает reset()
для RecordSet
, поддерживающего DataTable
, который удаляет все строки; затем он повторно заполняет таблицу свежими данными. Я попытался изменить его, чтобы использовать onDataReturnUpdateRows
, но это тоже не работает.
Изменить2:
Чтобы добиться желаемого контроля, я написал свой собственный список данных на основе <ul>
, который имел немного больше смысла для проблемы, которую я пытался решить. Ответ Дженни ниже должен помочь решить эту проблему для большинства других, поэтому я принял его как решение.