我正在使用具有 (YUI2) JSON DataSource用于填充DataTable的 UI 。我想做的是,当表中的值更新时,在值发生变化的单元格上执行一个简单的动画。
以下是一些相关的代码片段:
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()
,它删除所有行;然后它用新数据重新填充表。我尝试将其更改为 use ,但这似乎也不起作用。RecordSet
DataTable
onDataReturnUpdateRows
编辑2:
为了实现我想要的控制,我最终编写了<ul>
基于我自己的数据列表,这对我试图解决的问题更有意义。珍妮在下面的回答应该可以帮助大多数其他人解决这个问题,所以我接受了它作为解决方案。