Всем привет. Для чего нужен режим replace
если его функционал вроде как полностью реализован в режиме wrap
? При этом wrap
не делает зацикливание при замене узла на себя с обёрткой. В каких случаях нужно использовать replace
а в каких wrap
, что может такого replace
чего не может сделать wrap
и наоборот, исключая что wrap
не уходит в бесконечный цикл как replace
в остальном какие различия у них?
Пример.replace()(%7B%20block%3A%20%27link%27%2C%20content%3A%20%7B%7D%20%7D)%3B%0A%0Ablock(%27block2%27).wrap()(%7B%20block%3A%20%27link%27%2C%20content%3A%20%7B%7D%20%7D)%3B&bemjson=(%5B%0A%20%20%20%20%7B%20block%3A%20%27block1%27%20%7D%2C%0A%20%20%20%20%7B%20block%3A%20%27block2%27%7D%0A%5D)%3B%0A):
([
{ block: 'block1' },
{ block: 'block2' }
]);
block('block1').replace()({ block: 'link', content: {} });
block('block2').wrap()({ block: 'link', content: {} });
<div class="link">
<div></div>
</div>
<div class="link">
<div></div>
</div>
wrap()
как раз тем и отличается, что дополнительно создает флаг для защиты от зацикливания@tadatuta, если они ни чем кроме этого не отличаются и
wrap
ведет себя более корректно, для чего тогда нужны 2 почти одинаковых режима с разными названиями, т.е. можно сказать что если бы текущийreplace
убрали и вместо него использовалиwrap
под названиемreplace
то ничего по сути не изменилось? Других отличий вообще у них нет? Одно дело, когда введен режим-помощник напримерprependContent
который позволяет писать меньше кода и он сам знает что и как объединить, ноwrap
в этом плане не такой умный, ему надо указать конкретно что и куда выводить и если этого не сделать то он работает какreplace
, для чего тогда нужен такой небезопасныйreplace
?Суть
replace()
как раз в том, чтобы не делать лишних манипуляций, которые не нужны никогда, кроме ситуации, когда сущность заменяется сама на себя (а это все-таки очень частный случай).Имеется ввиду что движок при обработке режима
replace
работает быстрее чем при режимеwrap
или о каких "лишних манипуляциях" идет речь? Если да, тоwrap
работает медленнее даже если не содержит код для замены узла?wrap()
будет создавать флаг от зацикливания даже если исходная сущность не вставляется внутрь, так что в примере выше стоит использоватьreplace()