Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   велосипед для редактора строк (https://javascript.ru/forum/misc/49868-velosiped-dlya-redaktora-strok.html)

nverv 01.09.2014 15:01

велосипед для редактора строк
 
наверняка это миллион раз уже изобретено
простейший редактор текста

надо чтобы список DOM-элементов отображал содержимое элементов массива
тоесть визуализация массива элементов

так чтобы при редактировании элементов через интерфейс документа массив элементов синхронизировался

не могу понять как это сделать чтобы не было перерисовки DOM-элементов при обновлении массива элементов

то есть чтобы выбирая любой элемент в списке DOM-элементов всегда выбирался соответствующий элемент в массиве элементов
то есть чтобы сохранялось соответствие порядкового номера обоих массивов

задача простая и вроде понятно выразил


---------------------------
еще раз -


есть массив в котором элементы - например строки
этот массив надо визуализировать на экране в виде списка строк
полученные элементы интерфейса содержат некий код для функционирования редактора
редактор добавляет удаляет элементы массива
изменения сразу происходят на экране, меняется DOM
и при этом изменения вносятся в массив - тоесть происходит синхронизация

я понимаю что если просто заново отобразить все элементы массива на экране то редактор заработает
но не могу понять как это сделать чтобы не надо было перерисовывать DOM

Viral 01.09.2014 15:03

сто пардонов за оффтоп.. вы часом не сеошник?

skrudjmakdak 01.09.2014 15:05

Цитата:

Сообщение от nverv (Сообщение 328424)
задача простая и вроде понятно выразил

а я вот честно говоря нихера не понял))

nverv 01.09.2014 16:03

Цитата:

Сообщение от Viral (Сообщение 328425)
сто пардонов за оффтоп.. вы часом не сеошник?

первая практика после знакомства с js
простейший редактор текста делаю

skrudjmakdak 01.09.2014 16:10

есть куча готовых редакторов
http://www.tinymce.com/
http://nytimes.github.io/ice/demo/
http://ace.c9.io/#nav=about

можно еще покопаться)

nverv 01.09.2014 16:33

сам хочу понять алгоритм
ума не хватит читать чужой сложный кот

skrudjmakdak 01.09.2014 16:39

Цитата:

Сообщение от nverv (Сообщение 328443)
сам хочу понять алгоритм

открываешь исходники и смотришь))

nverv 01.09.2014 16:41

Цитата:

Сообщение от skrudjmakdak (Сообщение 328446)
открываешь исходники и смотришь))

спасибо
твои советы похоже бесполезны
мне все время кажется что на этом форуме много пидарасов ))

tsigel 01.09.2014 16:42

Когда выводите текст в редакторе - связываейте его не с конкретным html элементом, а с текстовой нодой внутри него.

tsigel 01.09.2014 16:47

Цитата:

есть массив в котором элементы - например строки
этот массив надо визуализировать на экране в виде списка строк
полученные элементы интерфейса содержат некий код для функционирования редактора
редактор добавляет удаляет элементы массива
изменения сразу происходят на экране, меняется DOM
и при этом изменения вносятся в массив - тоесть происходит синхронизация
Можно сделать карту массива, например:
arr = ["string1", "string2", "string3"];
map = {
   0: textNode1,
   1: textNode2,
   3: textNode3
}


Тогда отображение изменения второго элемента массива будет так:

arr[1] = "trololo";
map[1].textContent = arr[1];

nverv 01.09.2014 16:49

Цитата:

Сообщение от tsigel (Сообщение 328449)
Когда выводите текст в редакторе - связываейте его не с конкретным html элементом, а с текстовой нодой внутри него.

непонятно

я так рассуждаю - элементы на экране это массив, нумерованый список и данные для отображения это массив
доступ к ним по одинаковому порядковому номеру в списке-массиве

но после добавления удаления элементов на экране исчезает соответствие порядковых номеров

tsigel 01.09.2014 16:51

Должна быть синхронизация. Вы же знаете какой элемент был удален - удаляете элемент массива

tsigel 01.09.2014 16:53

если проблема в том чтобы по удаленному элементу найти связь с элементом массива - можете при создании добавлять ему атрибут номера. Что-то типа data-index="someIndex"

nverv 01.09.2014 17:04

товарищи как эта штуковина называется?
классика же
наверняка есть паттерн или шаблон для работы со списками - с динамическим добавлением удалением элементов

nverv 01.09.2014 17:06

Цитата:

Сообщение от tsigel (Сообщение 328458)
если проблема в том чтобы по удаленному элементу найти связь с элементом массива - можете при создании добавлять ему атрибут номера. Что-то типа data-index="someIndex"

про data- первым делом и подумал но пока не придумал как его использовать

нужна помощь зала

tsigel 01.09.2014 17:11

Вообще обычно никто не парится с прямым управлением домом. Есть шаблонизаторы, которые решают все эти проблемы. Шаблонизаторы бывают как простые (которые полностью передергивают дом), так и покруче (которые запоминают связи данных и конретной текстовой ноды). Выбор их зависит от задачи и необходимости оптимизаций.

nverv 01.09.2014 17:14

Цитата:

Сообщение от tsigel (Сообщение 328467)
Вообще обычно никто не парится с прямым управлением домом. Есть шаблонизаторы, которые решают все эти проблемы. Шаблонизаторы бывают как простые (которые полностью передергивают дом), так и покруче (которые запоминают связи данных и конретной текстовой ноды). Выбор их зависит от задачи и необходимости оптимизаций.

я хочу понять устройство велосипеда ))
мне надо самому понять и собрать код а не копировать чужое
мне надо на практике доучиться

вот эту проблему решу и тогда кажется смогу собрать редактор
еще сразу же думаю как сделать отмены действий: там нет пока пролблем

tsigel 01.09.2014 17:21

Хороший шаблонизатор (особенно такой как вы хотите с частичным обновлением) - это не паттерн, а много-много ООП кода.

nverv 01.09.2014 17:54

Цитата:

Сообщение от tsigel (Сообщение 328467)
Вообще обычно никто не парится с прямым управлением домом. Есть шаблонизаторы, которые решают все эти проблемы. Шаблонизаторы бывают как простые (которые полностью передергивают дом), так и покруче (которые запоминают связи данных и конретной текстовой ноды). Выбор их зависит от задачи и необходимости оптимизаций.

а почему это называется шаблонизатор

tsigel 01.09.2014 17:57

Потому что вам дужно выводить данные в определенном формате (шаблоне)

Например шаблон модального окна с использованием шаблонизатора underscore может выглядеть так:

<div>
   <div class="title"><%= title %></div>
   <div class="content"><%= content %></div>
   <div class="buttns">
       <% for (var i = 0; i < buttons.length; i++) { %>
            <button><%= button[i].text %></button>
       <% } %>
   </div>
</div>


Хочу получить верстку модального окна с 2 кнопками, заголовком и контентом:

_.template(modalTpl)({
      title: "Заголовок",
      content: "Контент",
      buttons: [{text: "Да"}, {text: "Нет"}]
   });


Таким образом мы уменьшаем в коде прямую работу с домом. Это удобно, особенно когда есть много похожих операций.

nverv 01.09.2014 18:04

Цитата:

Сообщение от tsigel (Сообщение 328477)
Потому что вам дужно выводить данные в определенном формате (шаблоне)

ты хош сказать что мой шаблон это список-массив ?

nverv 01.09.2014 18:05

наверное это надо перечитнуть
http://habrahabr.ru/post/160477/

nverv 01.09.2014 18:41

а есть ли возможность узнать порядковый списочный номер элемента хтмл-
списка ?

тоесть можно ли при добавлении удалении произвольного количества элементов - всегда можно узнать ноdый порядковый номер ?

то есть можно ли кликая по элементу получать его порядковый номер в списке дочерних элементов ?

tsigel 01.09.2014 22:51

nverv,
конечно можно


Часовой пояс GMT +3, время: 11:23.