问题 小胡子:从子节中的父节读取变量


在子节中,Mustache可以从父节读取变量吗?

比如我下面的例子,我想要的 {{order_store.id}} 从它的父级读取变量 $ order_store [(当前子循环的数组索引)] ['id']

template.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'
                        ),
                    ),
                ));

2582
2017-11-01 06:48


起源



答案:


Mustache不允许您引用父对象。要在子节内显示的任何数据都需要包含在子数组中。

例如:

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

在这种情况下,点符号无济于事 - 它不会神奇地让您访问父数组。 (顺便说一下,所有胡子解析器都不支持点符号,所以如果你有可能在将来重新使用其他编程语言模板,最好避免使用它。)


7
2017-12-11 01:25



实际上,我会采用@sofia建议并使用Handlebar.js。它与胡子兼容但添加了一些新功能,如在父上下文中搜索。我有同样的问题,Handlebar帮助我解决它而不改变我的json内容。 - Gustavo Cardoso
@GustavoCardoso问题是在PHP中寻找答案。 - Michael Mior
我试过这个 在js 似乎Mustache允许我通过引用它来引用父对象的属性, 如果children数组中没有重叠的名称 (如果有的话,胡子会从孩子那里拿起那个)。不过,我还没有测试过PHP中会发生什么。 - Pere


答案:


Mustache不允许您引用父对象。要在子节内显示的任何数据都需要包含在子数组中。

例如:

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

在这种情况下,点符号无济于事 - 它不会神奇地让您访问父数组。 (顺便说一下,所有胡子解析器都不支持点符号,所以如果你有可能在将来重新使用其他编程语言模板,最好避免使用它。)


7
2017-12-11 01:25



实际上,我会采用@sofia建议并使用Handlebar.js。它与胡子兼容但添加了一些新功能,如在父上下文中搜索。我有同样的问题,Handlebar帮助我解决它而不改变我的json内容。 - Gustavo Cardoso
@GustavoCardoso问题是在PHP中寻找答案。 - Michael Mior
我试过这个 在js 似乎Mustache允许我通过引用它来引用父对象的属性, 如果children数组中没有重叠的名称 (如果有的话,胡子会从孩子那里拿起那个)。不过,我还没有测试过PHP中会发生什么。 - Pere


如果要在客户端编译模板,则使用另一个选项 HandlebarsJS 模板,与Mustache兼容,并使用父表示法:

{{../order_store.id}}

6
2017-12-13 19:44





我有同样的问题,空对象不是null

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

如你所见,我可以在“if”语句中使用picture.id picture.src 值


1
2017-07-27 12:34





这里的技巧是在你要添加的模板的开头:

{{%DOT-NOTATION}}

-2
2017-11-26 17:35



什么?!?........ - Aryeh Armon