diff --git a/common.docs/templating/templating.ru.md b/common.docs/templating/templating.ru.md index 73ec00c9..c3ae5206 100644 --- a/common.docs/templating/templating.ru.md +++ b/common.docs/templating/templating.ru.md @@ -740,25 +740,22 @@ local()({ x: 1, 'a.b.c': 2 })(function() { Синтаксис: ```js -apply(expressions) +apply({assignObj}) ``` -Где `expressions` — это список выражений, модифицирующих контекст. Список может быть пуст. +Где `{assignObj}` — объект, ключи которого становятся полями контекста при входе в блок `applyNext`. Объект может отсутствовать. -Каждое выражение в списке `expressions` может представлять собой: +Первым аргументом может быть передана строка, которая интерпретируется как название моды. -* Хеш значений переменных, используемых для модификации контекста. Аналогичен блоку hash в [конструкции local](#local). -* Строку или приводимое к ней выражение. Означает «выставить указанную строку в качестве моды». - -Например, выражение `apply('content')` эквивалентно выражению `apply(this._mode = 'content')`. +Например, выражение `apply('content')` эквивалентно выражению `apply({ _mode : 'content' })`. При вычислении выражения `apply` выполняются следующие шаги: -1. Выполнение выражений (присваиваний) в блоке `expressions`. +1. Установка полей контекста, определенных в объекте `{assignObj}`. 2. Вызов процедуры выбора и выполнения шаблона в контексте, полученном в результате шага 1. -3. Восстановление значений переменных. +3. Восстановление исходных значений полей контекста. -Конструкция `apply(expressions)` представляет собой сокращенную запись выражения `local(expressions)(apply())`. +Конструкция `apply({assignObj})` представляет собой сокращенную запись выражения `local({assignObj})(apply())`. @@ -766,24 +763,30 @@ apply(expressions) Конструкция `applyNext` позволяет заново запустить процедуру применения шаблонов к текущему контексту непосредственно в теле шаблона. Результат вычисляется так, как если бы шаблона, в котором используется данная конструкция, не было. -Конструкция возвращает значение, вычисленное в результате применения шаблонов к текущему контексту. +Например, если у блока существует базовая реализация шаблона, при вызове `applyNext` будет возвращен результат ее применения: + +```js +block('b1')(function(){ return 'Ohoy!' }) +block('b1')(applyNext()) // Ohoy! +``` Синтаксис: ```js -applyNext(expressions) +applyNext({assignObj}) ``` -Где `expressions` — список выражений, модифицирующих контекст (операций присваивания значений переменным или строка, -означающая присвоение моды). Список может быть пуст. Аналогично блоку `expressions` в [конструкции apply](#apply). +Где `{assignObj}` — объект, ключи которого становятся полями контекста при входе в блок `applyNext`. Объект может отсутствовать. + +Первым аргументом может быть передана строка, которая интерпретируется как название моды. При вызове `applyNext` выполняются следующие шаги: 1. Создание в контексте флага, позволяющего избежать бесконечной рекурсии при вызове шаблонов. В качестве флага используется случайное число. 2. Добавление в предикат шаблона проверки на наличие флага. - 3. Выполнение блока `expressions` (модификация текущего контекста). - 4. Вызов процедуры выбора и выполнения шаблона `apply()`. + 3. Установка полей контекста, определенных в объекте `{assignObj}`. + 4. Вызов процедуры выбора и выполнения шаблона `apply`. 5. Возвращение значения, полученного в результате выполнения шаблона. Например, шаблон