Чтение кода воспроизведения объекта в каждой редакции Id, используя firepad+firebase+ace

Я использую технологии 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 ответ

Решение

Это выполнимо, но нетривиально, поэтому я приведу несколько советов, но не полный ответ. Сожалею.

Интересующий код, вероятно, FirebaseAdapter.prototype.monitorHistoryStartingAt_.

Если вы передадите ему 0, оно начнется в начале истории (а не с более поздней контрольной точки). По умолчанию он читает все ревизии, поэтому вам также необходимо изменить его, чтобы он остановился на ревизии, которую вы хотите отобразить. Затем, как только он ставит эти операции в очередь (от 0 до интересующей) в pendingReceivedRevisions_, он будет вызывать handleInitialRevisions_, который объединит их все вместе и применит их, чтобы вы были в курсе на данный момент истории.

Затем вы захотите убедиться, что редактор доступен только для чтения, поскольку вы не можете разумно изменить старую версию.

Надеюсь это поможет.

Другие вопросы по тегам