从 html 页面访问 public 最终静态字段
Access public final static field from tml page
我有一个网格,我想在其中从方法加载数据。此方法以 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>
现在,我想用 class 而非组件 class 中的 public 静态字符串字段替换 'STRING',例如:
<t:grid t:source="getSomeData(com.example.Class.STATIC_FINAL_FIELD)"...
>...</t:grid>
有什么办法可以直接做到这一点吗?因此,无需在组件 class 或带注释的字段中使用任何其他方法?
有一种方法可以实现您的要求,但这是一个糟糕的 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>
请注意,在您的问题中,组件 class 中的方法被命名为 getContactBasedOnType
,而在您的 tml 中您引用的是 getSomeData
。当然,方法名称必须匹配。
同样,以上是一个糟糕的 hack,但我得到的唯一解决方案是在组件 class 不能被触及的约束下工作。
使列表成为组件 class 的 属性 并在 setupRender() 方法中填充它会是一个更好的设计。
我有一个网格,我想在其中从方法加载数据。此方法以 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>
现在,我想用 class 而非组件 class 中的 public 静态字符串字段替换 'STRING',例如:
<t:grid t:source="getSomeData(com.example.Class.STATIC_FINAL_FIELD)"...
>...</t:grid>
有什么办法可以直接做到这一点吗?因此,无需在组件 class 或带注释的字段中使用任何其他方法?
有一种方法可以实现您的要求,但这是一个糟糕的 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>
请注意,在您的问题中,组件 class 中的方法被命名为 getContactBasedOnType
,而在您的 tml 中您引用的是 getSomeData
。当然,方法名称必须匹配。
同样,以上是一个糟糕的 hack,但我得到的唯一解决方案是在组件 class 不能被触及的约束下工作。
使列表成为组件 class 的 属性 并在 setupRender() 方法中填充它会是一个更好的设计。