2015-01-09 76 views
1

挖掘到的代码位我看到invalidate()的控制会增加一个计数器,这似乎标志着控制,失效后的区别。 这似乎导致了重新投降。SAPUI5:无效并重新呈现

所以如果你有一个控制,你想要重组,是最好练习使用invalidate()rerender()

如何做一个重新呈现居然被触发? (除明确地调用它当然)

回答

4

两个被标记为“受保护”,这意味着你不应该叫任何人,除非你真的深入到开发自定义的控件。当(例如)一个属性更改

的控制被失效。在这种情况下,您通常需要重新呈现控件,这就是setter默认调用invalidate的原因。

当您覆盖自定义控件中的invalidate方法时,可以分析失效的来源,然后决定是否真的想要重新渲染等。请参阅unified.Shell,它根据来源: https://sapui5.netweaver.ondemand.com/sdk/resources/sap/ui/unified/Shell-dbg.js行1539ff

同样:受保护意味着它不应该从外部调用(除非调试,否则它不应该是必需的)。

+0

感谢您的信息。我还没有真正理解什么时候更好地称为失效还是重置。也许当你想向框架建议重新渲染一个控件时,你可以调用invalidate(),并且当你真的想重新渲染时(甚至不提供invalidate函数中的机会来潜在地避免使用rerender (或者做一个部分重新渲染)? 这听起来是正确的吗? – 2015-01-11 17:32:04

+0

另外,你知道实际踢重新渲染(我想也会遍历无效链)的机制吗?某种定时器?例如,在Flex应用程序中,我认为它是基于框架的...... – 2015-01-11 17:32:30

+1

通常,如果您想在应用程序中使用invalidate或rerender,那么其他内容就会被破坏,也许您可​​以描述您尝试解决的问题,这样我就可以了解你的问题。重复一遍:最好的做法是不要使用。 – sirion 2015-01-12 08:32:06

1

我在工作中遇到这样的事情最近。我正在修复一个动画问题,但坏事是我必须在渲染后开始动画。如果这就是我所能处理的,但更糟的是控制渲染两次。当第一次渲染发生时,动画开始执行,但第二次渲染立即生效并且DOM被重建,然后动画被终止,效果就像没有执行动画。调查代码后,我发现有一个地方调用render()方法,它将立即执行渲染。将其更改为调用invalidated()方法后,它看起来动画效果很好。它看起来多个invalidate()方法调用只会导致执行一次渲染。