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