【问题标题】:Is there any way to define methods for data model when using FMPP?使用 FMPP 时有什么方法可以定义数据模型的方法吗?
【发布时间】:2019-05-09 14:48:53
【问题描述】:

我想向我的数据模型添加方法,因此我需要一种方法在我的 tdd 数据文件中指定它们。 例如有一个包含两个标量的 tdd 数据文件:

a: 1
b: 1 

我想添加一个方法area 将它们相乘。 这甚至可能吗?如果可以,我该如何实现?

【问题讨论】:

    标签: fmpp


    【解决方案1】:

    假设你有一个MyUtils,它有一个foo() 和一个bar() 方法,并且你想在模板中访问它们。

    您可以使用data 中的eval 数据加载器将任意Java 对象添加到模型中,例如myUtils: eval('new com.example.MyUtils()')。然后您可以在模板中发出myUtils.foo()。但是,您想在顶层添加方法。这也是可能的。在eval 和自定义DataLoader(无论您想使用哪个)中,您都可以访问enginefmpp.Engine 对象。然后你就可以使用这个技巧了:

    // Note: In case you are using eval, use Java 1.2 syntax (no generics).
    TemplateHashModel myUtilsModel = (TemplateHashModel) engine.wrap(new MyUtils());
    Map<String, TemplateModel> myUtilsMethodModels = new HashMap<>();
    myUtilsMethodModels.put("foo", myUtilsModel.get("foo"));
    myUtilsMethodModels.put("bar", myUtilsModel.get("bar"));
    return myUtilsMethodModels;
    

    然后你将Map 添加到data 没有名字。 (如果您将 Map 添加到 data 而不添加名称,则其键将成为顶级变量。)

    当然可以将其打磨得更好,例如自动查找所需的方法等。另外,我没有在上面尝试过(所以可能会出现拼写错误)。但这是基本思想。 (我想如果 FMPP 有一个加载类的静态方法的数据加载器,那将是实用的......但是,现在它没有。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-22
      • 2013-03-14
      • 1970-01-01
      • 2016-07-18
      • 2021-05-01
      • 1970-01-01
      相关资源
      最近更新 更多