我正在研究一些扩展openui5的新方法。 特别是我正在尝试用openui5实现材料设计(通过材料设计精简版https://github.com/google/material-design-lite)。通常情况下,您可以使用新组件扩展现有组件,但我希望尽可能避免这种情况。
一种方法是在运行时动态更改组件的渲染器。我想更改组件的特定实例的渲染器而不是所有实例。
我发现通过控件的MetaData,我可以更改覆盖渲染功能
myComponent.getMetadata().getRenderer().render = function(oRm, oControl) {
...
};
myComponent.rerender();
这给出了预期的效果。但是,使用此方法会更改组件类的所有实例的渲染器。
是否有某种方法只更改特定实例的渲染器?
答案 0 :(得分:3)
好吧,在作为框架一部分的标准控件中,每个控件的* Renderer都是一个静态类 - 这就是将控件实例传递给render()方法的原因。这就是重新定义render方法的原因,就像你所做的那样,会影响这种类型的所有控件实例。
潜入metadata.getRenderer()并为此实例返回不同的内容会导致类似的问题,因为ElementMetadata也是整个控件类的一个实例。克隆元数据并为某些实例修改它将是一种选择,但我认为不是一个好的。
也许一个简单的解决方案是最好的选择吗? 使用标志标记要以不同方式呈现的控件实例,并覆盖render方法以执行正常操作或执行特殊处理,具体取决于此标志。