【问题标题】:How get data out of current context with dust.js如何使用dust.js从当前上下文中获取数据
【发布时间】:2016-03-25 23:36:45
【问题描述】:

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

感谢您的帮助。

【问题讨论】:

  • 你的问题结构很好,写得很好。

标签: javascript dust.js


【解决方案1】:

您完全正确,推到上下文的最后一项成为当前上下文。如果您将多个项目推送到上下文中,则无法按位置引用它们,例如“在此之前推送到上下文中的项目”。

如果您向 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 可以按照我认为您的意图工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-13
    • 1970-01-01
    • 2020-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-22
    • 2020-05-05
    相关资源
    最近更新 更多