使用firepad + firebase + ace在每个修订版ID中重放读取对象的代码

时间:2015-03-29 03:20:32

标签: javascript json firebase ace-editor firepad

我正在使用firebase,firepad和ace技术。 我能够通过firepad和ace写一个文件,并在不同的时间将它存储在firebase中。我看到在firebase中生成的历史记录。 接下来我需要添加一段代码,我可以在历史中的任何一点检索文档。 我写了以下代码:

sObj.once('value', function(historySnapshot){
// Get each revision Id
    historySnapshot.forEach(function(itemSnapshot) {
        var name = 'history/'+itemSnapshot.name(); 
        console.log(name);
        var idref = sObj.child(name);
        /* Here I can read each revision object, find the operation  and apply that change
           in ace editor */

    });
});

读取修订对象的一种方法是JSon解析,知道那里有什么操作。在编辑器上应用该操作。构造代码什么操作对应于可能乏味的操作。

除此之外还有任何函数,可以避免解析,并可以直接告诉我要应用的操作。

我看到了getText函数,但它告诉了当前的值。 我需要在给定历史中的任何一点看到价值。

1 个答案:

答案 0 :(得分:2)

这是可行的,但非常重要,所以我会提供一些指示,但不是完整的答案。遗憾。

感兴趣的代码可能是FirebaseAdapter.prototype.monitorHistoryStartingAt _。

如果你传递0,它将从历史开始(而不是在最近的检查点)开始。默认情况下,它会读取所有修订版本,因此您还需要修改它以停止在要显示的修订版本中。然后,一旦它将pendingReceivedRevisions_中的那些操作(从0到感兴趣的那些)排队,它就会调用handleInitialRevisions_,它们将它们组合在一起并应用它们以使您在历史记录的那一点上保持最新。

然后您要确保编辑器是只读的,因为您无法合理地修改旧版本。

希望这有帮助。