如何使用 dust.js 从当前上下文中获取数据

How get data out of current context with dust.js

我正在使用 Dust.js 并尝试使用 dust.makeBase 函数合并和呈现来自两个数组的数据(dataxdatay) 在 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;
}
}});

感谢任何帮助。

你完全正确,最后一个推送到上下文的项目成为当前上下文。如果将多个项目推送到上下文中,则无法按位置引用它们,例如 "the item pushed onto the context before this one".

如果您向 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 可以正常工作。