我正在使用Dust.js并尝试使用dust.makeBase函数来合并和呈现来自两个数组( datax 和 datay )的数据一个 newcontext 变量。
var context = dust.makeBase();
var newcontext = context.push(datax)
.push(datay);
作为Dust文档,推送的最后一个数组(在我的示例中 datay )成为当前上下文。启动jsFiddle我可以看到从当前上下文获得的数据是正确显示的。
自存储信息
{#.}
{#data}{id} - {special_offer}
{/data}
{/.}
然而,当我从当前环境中显示数据时,显然没有达到数据。以下不起作用。
自存储设施
{#.}
{#facility}
{id} - {size}
{#facilityamenities.amenities}{amenities_id} - {full_desc}
{/facilityamenities.amenities}
{/facility}
{/.}
我已经对http://www.dustjs.com/guides/contexts/做了一些说明,但这还不够。
检查网络上的一些例子我是上下文助手,我在jsfiddle上发布了这个版本,虽然执行了功能代码但结果并不像预期的那样。在一段代码下面。
var context = dust.makeBase({"getselfdata": {
"selfdata": function(chunk, context)
{
var price = context.get("facility.price_formatted");
return price;
}
}});
任何帮助都表示赞赏。
答案 0 :(得分:0)
完全正确的是推送到上下文的最后一项成为当前上下文。如果将多个项目推送到上下文中,则无法按位置引用它们,例如"项目在此之前被推送到上下文中。
如果您为Dust提供当前上下文中不存在的引用,Dust将搜索每个先前的上下文以供参考。这允许您走上上下文堆栈。
我对您的示例进行了两处更改以使其正常工作。对于datax
,我使用一个键facilities
:
{ "facilities": [
{ "facility": { ... } },
{ "facility": { ... } }
]}
然后,在你的模板中,我告诉Dust要搜索这个引用:
{#facilities}
{#facility}
<tr><td>{id} - {size} - {#facilityamenities}{#amenities}
{amenities_id} - {full_desc}
{/amenities}{/facilityamenities}</td></tr>
{/facility}
{/facilities}
此模板中还有一个错误。要使{#facilityamenities.amenities}
生效,您的数据必须如下所示:
{ "facilityamenities": {
"amenities": { ... } }
但是,您的"facilityamenities"
是一个数组,因此您应该使用{#facilityamenities}{#amenities}
,以便Dust首先遍历facilityamenities
,然后搜索amenities
。
通过这些更改,您JSFiddle可以正常工作。