Усы: чтение переменных из родительского раздела в дочернем разделе

Возможно ли в Mustache считывать переменную из родительского раздела в дочернем разделе?

например, мой пример ниже, я хочу, чтобы {{order_store.id}} читал переменную из этого родителя $order_store [(индекс массива текущего дочернего цикла)] ['id "]

шаблон .mustache

{{#order_store}}<table>
    <caption>
        Store Name: {{name}}
        Product Ordered: {{products}}
        Product Weights: {{products_weight}}
    </caption>
    <tbody>
        {{#shipping_method}}<tr>
            <td>
                <input type="radio" name="shipping[{{order_store.id}}]" id="shipping-{{id}}" value="{{id}}" /> 
                <label for="shipping-{{id}}">{{name}}</label>
            </td>
            <td>{{description}}</td>
            <td>{{price}}</td>
        </tr>{{/shipping_method}}
    </tbody>
</table>{{/order_store}}

примеры данных (в PHP);

                $order_store => array(
                array(
                    'id' => 1,
                    'name' => 'Kyriena Cookies',
                    'shipping_method' => array(
                        array(
                            'id' => 1,
                            'name' => 'Poslaju',
                            'description' => 'Poslaju courier'
                        ),
                        array(
                            'id' => 2,
                            'name' => 'SkyNET',
                            'description' => 'Skynet courier'
                        ),
                    ),
                ));

Ответ 1

Усы не позволяют ссылаться на родительские объекты. Любые данные, которые вы хотите отображать в пределах дочернего раздела, должны содержаться в дочернем массиве.

Например:

$order_store => array(
array(
    'id' => 1,
    'name' => 'Kyriena Cookies',
    'shipping_method' => array(
        array(
            'id' => 1,
            'name' => 'Poslaju',
            'description' => 'Poslaju courier',
            'order_store_id' => '1'
        ),
        array(
            'id' => 2,
            'name' => 'SkyNET',
            'description' => 'Skynet courier',
            'order_store_id' => '1'
        ),
    ),
));

Затем вы можете использовать тег {{order_store_id}}.

Точечная нотация не помогла бы в этом случае - она ​​не волшебным образом даст вам доступ к родительскому массиву. (Кстати, нотация точек не поддерживается всеми синтаксическими анализаторами усов, поэтому лучше избегать ее использования, если есть вероятность, что вы захотите повторно использовать свои шаблоны с другим языком программирования в будущем.)

Ответ 2

Если шаблон должен быть скомпилирован на стороне клиента, другой вариант - использовать HandlebarsJS шаблоны, совместимые с Mustache, и используйте родительскую нотацию:

{{../order_store.id}}

Ответ 3

У меня была та же проблема, с пустым объектом, который не является нулевым

<div class="photo">
    {{#picture.id}}
        <img src="{{picture.src}}" alt="{{picture.name}}" />
    {{/picture.id}}
</div>

как вы можете видеть, я могу использовать picture.id в выражении "if" picture.src значение

Ответ 4

Для некоторых парсеров Усы необходимо {{order_store.id}}.

Классическим примером является SwaggerCodegen. Каждое свойство "name" переопределяет свойство "name". В этом случае {{../model.name}} вызывает ошибку. Я обойду его следующим:

{{name}} // model (parent) name value
{{#vars}}
    {{model.name}} // model (parent) name value
    {{name}}       // vars (child) name valu
{{/vars}}

Ответ 5

Трюк здесь находится в начале вашего шаблона, чтобы добавить:

{{%DOT-NOTATION}}