我有一个网格,我想从方法中加载数据。此方法将String作为参数,并生成必要的List作为输出。
例如,它可能如下所示:
public List<SomeObject> getContactBasedOnType(final String type)
{
final List<SomeObject> returnList = new ArrayList<>();
...//based on "type" list will be populated by different data
return returnList;
}
然后在我的tml页面中,将其如下使用:
<t:grid t:source="getSomeData('STRING')"...
>...</t:grid>
现在,我想用组件类以外的其他类的公共静态String字段替换“ STRING”,例如:
<t:grid t:source="getSomeData(com.example.Class.STATIC_FINAL_FIELD)"...
>...</t:grid>
有什么办法可以直接做到吗?因此,在组件类或带注释的字段中不使用任何其他方法吗?
最佳答案
有一种方法可以实现您的要求,但这是一个可怕的hack。
<t:grid
t:source="getSomeData(getClass().getClassLoader().loadClass('com.example.Class').getField('STATIC_FINAL_FIELD').get(getClass().getClassLoader().loadClass('com.example.Class').getField('STATIC_FINAL_FIELD').getType().newInstance()))">
...
</t:grid>
请注意,在您的问题中,组件类中的方法名为
getContactBasedOnType
,而在tml中,您引用的是getSomeData
。当然,方法名称必须匹配。同样,以上内容是一个可怕的技巧,但是我唯一的解决方案是在不能触摸组件类的约束下进行的。
使列表成为组件类的属性,并在setupRender()方法中填充它会是一个更好的设计。