【发布时间】:2018-04-17 09:43:19
【问题描述】:
我正在尝试为使用传单和传单路由机的工具实现简单的撤消/重做功能。 这是我的功能:
var activityBuffer = [];
var undoFlag = false;
Routing.on('routeselected', function(){
if (undoFlag) {
undoFlag = false;
}
else {
var newWaypoints = Routing.getWaypoints();
activityBuffer.push(newWaypoints);
console.log(activityBuffer);
}
});
function undoActivity(){
var lastStateIndex = activityBuffer.length - 2
if (lastStateIndex >= 0) {
var oldState = activityBuffer[lastStateIndex];
Routing.setWaypoints(oldState);
activityBuffer.splice( activityBuffer.length - 1, 1);
undoFlag = true;
console.log(activityBuffer);
}
}
如果我只是添加更多点并触发 routeselected 事件,它工作正常,但问题是当我移动我的航点并且相同点的坐标发生变化时,该航点的 activityBuffer 中的条目也会自行更新,添加另一个新航点数组也被推送。为什么会这样?
我希望我解释了我的问题。 寻求帮助!
【问题讨论】:
-
撤消/重做是一个真正解决的问题....你看过任何关于其实现的文章/教程吗?
-
我找不到任何有关传单路由机器 API 或堆栈上任何位置的撤消/重做的参考。知道的可以分享一下吗?
-
“传单路由”的撤消/重做与其他所有内容相同。您存储每次更改的状态,并在撤消时恢复它。您还保留另一个重做列表(如果您愿意)
-
我明白了它背后的逻辑,但这里的问题有点特定于传单路由机器,它会覆盖存储在缓冲区中的航点数组。
标签: javascript leaflet leaflet.draw leaflet-routing-machine