我需要检测何时在observableArray中移动项目。在我当前的版本(2.1.0)中,我通过调用setTimeout
所有删除事件并等待查看添加事件是否紧随其后来完成此操作:
var delayed = [];
var key; /* obtained by comparing original observableArray with updated list and iterating all differences */
if( /** record exists in original list but not new list ) {
// it was deleted, we don't immediately fire a notification (it may get re-inserted in a moment)
delayed[key] = setTimeout(function() { sendDeleteNotification(key); }, 0);
}
else if( /** record exists in new list but not original */ ) {
if( delayed[key] ) {
// it was deleted and immediately re-added (it's a move)
clearTimeout(delayed[key]);
sendMoveNotification( key );
}
else {
// it was added
sendAddedNotification( key );
}
}
在淘汰赛 2.2 中,我看到了 beforeMove 和 afterMove 的新事件。但是,我找不到任何以编程方式使用它们的方法。
最终目标是能够立即镜像数据库中的客户端更改,但不显示添加/删除来代替移动事件。在列表中向上或向下移动的记录不应标记为已删除然后新添加。
可以在 JavaScript 中直接使用新的 beforeMove/afterMove 绑定(例如事件模型?)来改进这一点吗?
干杯,