【问题标题】:Openui5: Change renderer for component during runtime?Openui5:在运行时更改组件的渲染器?
【发布时间】:2015-08-04 18:57:02
【问题描述】:

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

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

我发现通过控件的MetaData可以改变覆盖渲染函数

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

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

有没有办法只改变特定实例的渲染器?

【问题讨论】:

    标签: sapui5


    【解决方案1】:

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

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

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

    类似这样的: http://jsbin.com/yabujigitu/edit?html,output

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-02
      • 2021-01-27
      • 2023-03-28
      • 2022-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-09
      相关资源
      最近更新 更多