使用FMPP时,有什么方法可以定义数据模型的方法吗?

时间:2019-05-09 14:48:53

标签: fmpp

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

a: 1
b: 1 

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

1 个答案:

答案 0 :(得分:0)

因此,假设您有一个MyUtils和一个foo()和一个bar()方法,并且想访问模板中的方法。

您可以使用eval中的data数据加载器(例如myUtils: eval('new com.example.MyUtils()'))向模型添加任意Java对象。然后,您可以在模板中发布myUtils.foo()。但是,您想在顶层添加方法。这也是可能的。在eval和自定义DataLoader中(无论您要使用哪个),您都可以访问engine对象fmpp.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具有一个可以加载类的静态方法的数据加载器是可行的。但是,现在它还没有那个。)