Skip to content

Commit

Permalink
Merge ba4529d into e45dec2
Browse files Browse the repository at this point in the history
  • Loading branch information
Murdalay committed Sep 17, 2014
2 parents e45dec2 + ba4529d commit 61d3543
Showing 1 changed file with 19 additions and 16 deletions.
35 changes: 19 additions & 16 deletions common.docs/templating/templating.ru.md
Original file line number Diff line number Diff line change
Expand Up @@ -740,50 +740,53 @@ 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())`.

<a name="applynext"></a>

##### applyNext

Конструкция `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. Возвращение значения, полученного в результате выполнения шаблона.

Например, шаблон
Expand Down

0 comments on commit 61d3543

Please sign in to comment.