我想将方法添加到我的数据模型中,因此我需要一种方法来在我的tdd数据文件中指定它们。例如,具有包含两个标量的tdd数据文件:
a: 1
b: 1 我想添加一个将它们相乘的方法area。这是可能的吗?如果可能,我该如何实现?
发布于 2019-05-12 03:02:48
因此,假设您有一个具有foo()和bar()方法的MyUtils,并且您希望在模板中访问这些方法。
您可以使用data中的eval数据加载器(如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有一个数据加载器来加载类的静态方法,那么它将是实用的……但是,目前它还没有这样的功能。)
https://stackoverflow.com/questions/56062083
复制相似问题