如何使用dust.js

时间:2016-03-25 23:36:46

标签: javascript dust.js

我正在使用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;
}
}});

任何帮助都表示赞赏。

1 个答案:

答案 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可以正常工作。