dust.js - 在dust.js 中的表达式和嵌套表达式?

标签 dust.js

我希望能够像这样在dust.js 中添加一个值:

 this is x+1 : {{x}+1} //does not work  :'(

我知道我可以用 helper 做到这一点(非常冗长)
 this is x+1 : {@math key="x" method="add" operand="1" /}

我可以忍受(但不快乐)

但是当我想嵌套一个参数时呢?
 this is x+1+1 : {@math key='{@math key="x" method="add" operand="1" /}' method="add" operand="1" /} // no dice and wins ugly code prize!

 this is x+1+1 : {@math key='x' method="add" operand="1"} {@math key="selectKey" method="add" operand="1" /} {/math}  //still no dice - btw selectKey is an output variable for the @math helper

是否有可能做到这一点?我很想尝试在核心库中修补它,因为它让我非常恼火。

还有什么其他方法可以做到这一点?创建临时变量(即 {xplus1})?我目前的解决方案是将任何/所有逻辑移动到助手 - 我正在编写很多助手。

更新:

我编写了一个可以创建作用域变量的助手。这似乎是一种干净的方法。
   {@eval xplus1="{x} + 1"}

    ... scope where x = x+1
     this is x+1 : {xplus1} 

   {/eval} 

现在它正在使用 JavaScript eval,但我正在考虑使用像 JavaScript Expression Evaluator 这样的 JS 数学库。或 math.js

最佳答案

除了 Tom 的解决方案,这里还有一个 eval 的实现评估包含块的助手。

例如,如果您有一个变量 a = 5b = 10在你的情况下,

{@eval}{a} + {b} + 100{/eval}

将呈现为 115 .

您还可以编写这些评估:
{@eval}{a} + {b} + {@eval}{a} + {b} + 100{/eval}{/eval} //Would render 130

这是代码:
dust.helpers.eval = function(chunk, context, bodies) {
    var expression = '';
    chunk.tap(function(data) {
        expression += data;
        return '';
    }).render(bodies.block, context).untap();
    chunk.write(eval(expression));
    return chunk;
}

关于dust.js - 在dust.js 中的表达式和嵌套表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16683422/

相关文章:

javascript - 当我直接通过ID访问它时,jquery on click不会触发

vue.js - 与 vue.js 一样使用 dust.js

dust.js - 灰尘满0.3.0.min.js在哪里

javascript - 灰尘模板包含多次

javascript - 如何访问dust.js 中的 block 助手主体?

dust.js 对象打印

javascript - 是否可以让 DUST 模板循环并交错来自两个不同数组的元素?

javascript - 结合 DustJS 尺寸助手并选择

javascript - NodeJS/Express : implicitly push data from custom middleware into render call

javascript - dust.js:在作用域部分使用路径