Усы: чтение переменных из родительского раздела в дочернем разделе - PullRequest
14 голосов
/ 01 ноября 2010

Возможно ли в 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'
                        ),
                    ),
                ));

Ответы [ 5 ]

8 голосов
/ 11 декабря 2010

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

Например:

$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}}.

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

8 голосов
/ 13 декабря 2011

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

{{../order_store.id}}
2 голосов
/ 07 декабря 2018

Для некоторых анализаторов Усов требуется {{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}}
1 голос
/ 27 июля 2012

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

0 голосов
/ 26 ноября 2010

Хитрость здесь в начале вашего шаблона для добавления:

{{%DOT-NOTATION}}
...