Openui5:在运行时更改组件的渲染器?

时间:2015-08-04 08:23:52

标签: sapui5

我正在研究一些扩展openui5的新方法。 特别是我正在尝试用openui5实现材料设计(通过材料设计精简版https://github.com/google/material-design-lite)。通常情况下,您可以使用新组件扩展现有组件,但我希望尽可能避免这种情况。

一种方法是在运行时动态更改组件的渲染器。我想更改组件的特定实例的渲染器而不是所有实例。

我发现通过控件的MetaData,我可以更改覆盖渲染功能

myComponent.getMetadata().getRenderer().render = function(oRm, oControl) {
...
};
myComponent.rerender();

这给出了预期的效果。但是,使用此方法会更改组件类的所有实例的渲染器。

是否有某种方法只更改特定实例的渲染器?

1 个答案:

答案 0 :(得分:3)

好吧,在作为框架一部分的标准控件中,每个控件的* Renderer都是一个静态类 - 这就是将控件实例传递给render()方法的原因。这就是重新定义render方法的原因,就像你所做的那样,会影响这种类型的所有控件实例。

潜入metadata.getRenderer()并为此实例返回不同的内容会导致类似的问题,因为ElementMetadata也是整个控件类的一个实例。克隆元数据并为某些实例修改它将是一种选择,但我认为不是一个好的。

也许一个简单的解决方案是最好的选择吗? 使用标志标记要以不同方式呈现的控件实例,并覆盖render方法以执行正常操作或执行特殊处理,具体取决于此标志。

这样的事情: http://jsbin.com/yabujigitu/edit?html,output