Мне немного сложно вставить новую строку программно с помощью javascript.Ace.js Программно добавить новую строку
Позвольте мне рассказать вам немного о моем проекте. Во-первых, это означает, что он будет интерактивной совместной IDE с использованием ACE.JS и SignalR, чтобы разрешить редактирование в режиме реального времени более чем одним человеком.
Для достижения этой цели я зацепил в к ace.js случае изменения редакторов:
editor.getSession().on('change', function (e) {});
Я тогда слушать к действию, что пользователь выполнил и действовать соответствующим образом с помощью переключателя заявление. Таким образом, событие on change выглядит так:
editor.getSession().on('change', function (e) {
console.log(self.fromserver);
if (self.wasMe) {
self.wasMe = false;
return;
}
switch(e.data.action) { //what action did this user perform?
case "insertText":
if (!self.fromserver) {//to prevent an 'n' event loop, check if event came from server
} else {
}
break;
case "insertLines":
if (!self.fromserver) {
} else {
}
break;
case "removeText":
var position = JSON.stringify(e.data.range);
if (!self.fromserver) {
self.ide.server.removeSyntax(position);
} else {
self.fromserver = false;
}
break;
case "removeLines":
var lines = JSON.stringify(e.data.range);
if (!self.fromserver) {
self.ide.server.removeLines(lines);
}
break;
}
self.fromserver = false;
console.log(e.data);
});
Вставка текста, вставка текста и удаление текста (плюс удаление блоков текста) работают правильно.
Проблема
Новые линии с отступом! Возьмем, к примеру, пользователь напечатал следующий код:
function(){
, когда пользователь нажимает ввести блок-код отформатирован следующим образом:
function(){
//indentation
}
Изменение событий, вызвавших это посылаются на сервер так что другие пользователи обновляются, сервер вызывает функцию на клиентских компьютерах в зависимости от действия пользователя. Это может быть либо editor.session.insert //add text
или editor.session.remove //remove text
или (в настоящее время), для новых линий self.editor.insertNewLine(range.end.row, line);
Проблема заключается в том, что клиентские машины, которые обновляются с сервера не вкладку правильно, это приводит к их редактор рассинхронизации.
Вопрос
Мой вопрос к вам, ребятам есть ли у ace.js редактора есть функция «формат»? Я попробовал функцию editor.indent, но это, похоже, не работает должным образом.
Любая помощь будет высоко оценена.
Спасибо, Кеннет, я считаю, что мне нужно переосмыслить информацию, которую я отправляю на сервер. но это похоже на лучший способ сделать это (держит всех в синхронизации с сервером, не позволяет редактору принимать ввод). Так что спасибо. Jay – Jay
не забудьте добавить еще один скрытый номер, порядок отображения, например. в случае, если пользователь добавит строку между строкой 2 и линией 3 –