2015-01-09 3 views
1

После копания в коде немного я вижу, что invalidate() на элементе управления увеличит счетчик, который, кажется, помечает элемент управления как недействительный. Это, похоже, приводит к ререйдеру.SAPUI5: разница между invalidate и reerender

Итак, если у вас есть контроль над тем, что вы хотите изменить, лучше использовать invalidate() или rerender()?

Как действительно происходит перезарядка? (за исключением, конечно, явно его вызывая)

ответ

4

Оба они обозначены как «защищенные», то есть вы не должны звонить никому из них, если вы действительно не вникаете в разработку настраиваемых элементов управления.

Элемент управления становится недействительным, когда (например) свойство изменяется. В этом случае вы обычно хотите перерисовать элемент управления, поэтому сеттеры по умолчанию недействительны.

Когда вы перезаписываете свой метод invalidate в своем настраиваемом элементе управления, вы можете проанализировать источник недействительности, а затем решить, действительно ли вы хотите переиздать и т. Д. См. Например, унифицированную. Шелла, которая решает, что делать по недействительности на основе источник: https://sapui5.netweaver.ondemand.com/sdk/resources/sap/ui/unified/Shell-dbg.js линия 1539ff

Снова: Защищенный означает, что его нельзя вызывать извне (и что это не обязательно, за исключением отладки).

+0

Благодарим за эту информацию. Я все еще не понимаю, когда лучше назвать invalidate vs. reerender. Возможно, вы вызываете invalidate(), когда хотите предложить инфраструктуре повторно отобразить элемент управления, и вы вызываете rerender(), когда вы действительно хотите повторно выполнить рендеринг (и даже не предоставляете возможность в функции invalidate, чтобы потенциально избежать rerender (или сделать частичный повтор)? Звучит ли он на правильном пути? –

+0

Также вы знаете механизм, который фактически ударяет по рендерингу (который, я думаю, также будет пересекать цепочку недействительных)? таймер? Например, в приложениях Flex я думаю, что он основан на фреймах ... –

+1

Обычно, если вы хотите использовать недействительный или реендер внутри своего приложения, что-то еще не работает. Возможно, вы могли бы описать проблему, которую пытаетесь решить, чтобы я мог понять вашу проблему. Повторить: Лучшая практика - не использовать. – sirion

1

В последнее время я столкнулся с такой проблемой. Я исправляю проблему с анимацией, но плохая вещь - мне нужно запустить анимацию после рендеринга. Если это все, что я могу с этим справиться, но хуже то, что контроль дважды. Когда происходит первый рендеринг, начинается анимация, но второй рендеринг приходит немедленно, и DOM был реорганизован, затем анимация завершается, и эффект походит на то, что анимация не выполнена. После изучения кода я обнаружил, что существует метод invoke render(), который будет немедленно выполнять рендеринг. После изменения для вызова метода invalidated() он выглядит так, что анимация работает хорошо. Он выглядит как вызов метода invalidate() только для выполнения рендеринга один раз.

Смежные вопросы