我有一个网格,我想从方法中加载数据。此方法将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()方法中填充它会是一个更好的设计。

08-18 05:53