如何在运行时在dust.js中启动变量?

时间:2015-07-23 09:16:45

标签: node.js dust.js

如何在尘埃js模板中启动变量。

问题:

//want to initiate a variable like flag = false;
{#orderItemData}
    {^isTicketDisabled}
        //assign flag = true;
    {/isTicketDisabled}
{/orderItemData}
//I need to process here on the basis of flag. 

我该怎么办?请帮忙。

1 个答案:

答案 0 :(得分:0)

有几种不同的解决方案。我会给你一个跟随你的问题的信,一个我认为更优雅,完成同样的事情。

将数据设置到上下文

如果您真的想根据Dust模板将数据设置到上下文中,您可以编写一个帮助程序来执行此操作。它可能看起来像这样:

dust.helpers.addToContext = function(chunk, context, bodies, params) {
  var key = context.resolve(params.key);
  var value = context.resolve(params.value);

  // The easiest thing to do is just to add this value to the context globals
  // so that it's accessible everywhere
  context.global[key] = value;
  return chunk;
}

然后你会像这样使用它:

{@addToContext key="flag" value="true"/}

使用Context Helper

然而,你真正想要的是一种说“如果任何门票被禁用,做某事”的方式。这就是上下文帮助者的用途 - 它们是对现有数据的转换。您可以像这样在上下文中添加一个帮助器:

{
  orders: [{ orderItemData: { ... } },
           { orderItemData: { ... } },
           { orderItemData: { ... } }]
  isTicketForOrderDisabled: function(chunk, context, bodies, params) {
    // Helpers can return true or false to determine the rendering
    // of their block, among many other things. This is a simple example
    return context.get('isTicketDisabled');
  }
}

并像这样使用它:

{#orders}
  {#orderItemData}{! Display some things !}{/orderItemData}
  {#isTicketForOrderDisabled:orderItemData}{! Passing a single order to the helper !}{/isTicketForOrderDisabled}
{/orders}

所以现在您不必更改上下文,但仍然可以从现有数据中获取所需的所有信息。