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

Sapui5 Openui5:在运行时更改组件的渲染器?,sapui5,Sapui5,我正在研究一些扩展openui5的新方法。 特别是,我正在玩弄用openui5(通过material design lite)实现材质设计的想法。通常,您会使用新组件扩展现有组件,但如果可能的话,我希望避免这种情况 一种方法是在运行时动态更改组件的渲染器。我想更改组件的特定实例而不是所有实例的渲染器 我发现,通过控件的元数据,我可以更改覆盖呈现函数 myComponent.getMetadata().getRenderer().render = function(oRm, oControl) {

我正在研究一些扩展openui5的新方法。 特别是,我正在玩弄用openui5(通过material design lite)实现材质设计的想法。通常,您会使用新组件扩展现有组件,但如果可能的话,我希望避免这种情况

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

我发现,通过控件的元数据,我可以更改覆盖呈现函数

myComponent.getMetadata().getRenderer().render = function(oRm, oControl) {
...
};
myComponent.rerender();
这就产生了预期的效果。但是,使用此方法会更改组件类的所有实例的渲染器


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

在作为框架一部分的标准控件中,每个控件的*呈现器都是一个静态类-这就是为什么控件实例被传入render()方法的原因。这就是为什么在重新定义渲染方法时会影响此类型的所有控件实例

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

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

大概是这样的:

好的,在作为框架一部分的标准控件中,每个控件的*呈现器都是一个静态类-这就是为什么控件实例被传入render()方法的原因。这就是为什么在重新定义渲染方法时会影响此类型的所有控件实例

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

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

大概是这样的:

好的,在作为框架一部分的标准控件中,每个控件的*呈现器都是一个静态类-这就是为什么控件实例被传入render()方法的原因。这就是为什么在重新定义渲染方法时会影响此类型的所有控件实例

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

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

大概是这样的:

好的,在作为框架一部分的标准控件中,每个控件的*呈现器都是一个静态类-这就是为什么控件实例被传入render()方法的原因。这就是为什么在重新定义渲染方法时会影响此类型的所有控件实例

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

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

大概是这样的: