【问题标题】:Handlebars helper interpets string as integerHandlebars 助手将字符串插入为整数
【发布时间】: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 程序的内容类似于 &quote01&quote

标签: javascript handlebars.js handlebars.net


【解决方案1】:

要将值作为字符串处理,只需使用",例如:

var s = "{{ifCond MyData eq "01" X Y}}";

查看工作示例:https://dotnetfiddle.net/7JLLPe


如果您需要更多帮助程序,您还可以查看此项目(其中还包括 String.Equal 帮助程序方法):

https://github.com/Handlebars-Net/Handlebars.Net.Helpers

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多