如何使用 dust.js 从当前上下文中获取数据
How get data out of current context with 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;
}
}});
感谢任何帮助。
你完全正确,最后一个推送到上下文的项目成为当前上下文。如果将多个项目推送到上下文中,则无法按位置引用它们,例如 "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 可以正常工作。
我正在使用 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;
}
}});
感谢任何帮助。
你完全正确,最后一个推送到上下文的项目成为当前上下文。如果将多个项目推送到上下文中,则无法按位置引用它们,例如 "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 可以正常工作。