【发布时间】:2023-02-04 05:13:30
【问题描述】:
语境
在把手中,我想比较两个值并根据它们是否相等打印 X 或 Y。 我成功注册了一个比较助手:
private static string GetArgumentValue(object argument)
{
if (argument.GetType().Name == "UndefinedBindingResult")
{
return (string) argument.GetType().GetField("Value").GetValue(argument);
}
return argument.ToString();
}
public void RegisterHelper()
{
Handlebars.RegisterHelper("ifCond", (output, context, arguments) =>
{
var value1 = GetArgumentValue(arguments[0]);
var operation = GetArgumentValue(arguments[1]);
var value2 = GetArgumentValue(arguments[2]);
var returnValue1 = GetArgumentValue(arguments[3]);
var returnValue2 = GetArgumentValue(arguments[4]);
switch (operation)
{
case "eq":
output.Write(value1 == value2 ? returnValue1 : returnValue2);
break;
case "ne":
output.Write(value1 != value2 ? returnValue1 : returnValue2);
break;
default:
throw new Exception("ifCond: Unrecognized operation");
}
});
}
我是这样使用它的:
'{{ifCond MyData eq 01 X Y}}'
有什么问题?
MyData 是一个值为 01 的变量 这意味着将 MyData 与 01 进行比较应该打印 X,不幸的是,它打印 Y(意味着它们不相等)。 这是因为所有参数都是 UndefinedBindingResult 类型,除了第三个是整数。这就是为什么将 MyData (01) 与 1 进行比较不相等的原因。
问题:将字符串传递给我的辅助函数的正确方法是什么?显然,它将第三个参数 - 01 解释为一个整数,并仅将其提供为 1。
免责声明:我意识到我的解释不是很好,但我的 Handlebards 知识有限。
【问题讨论】:
-
{{ifCond MyData eq "01" X Y}}? -
@76484 我试过那个。它转义了引号,到达 .NET 程序的内容类似于 "e01"e
标签: javascript handlebars.js handlebars.net