2017-02-18 9 views
0

У меня есть идея избавиться от i18n файлов в SAPUI5. Я мог бы решить, что и если вы заинтересованы вы можете найти какую-то часть решения здесь:Как отложить рендеринг представления в SAPUI5 до получения некоторых данных из бэкэнд?

How to create i18n model from an oData service in SAPUI5.

вызвать функцию для создания модели, когда метаданные загружены:

this.getModel("MY_SERVISE").attachMetadataLoaded(this._createI18nModel, this); 

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

Теперь вопрос заключается в том, как отложить рендеринг или заставить библиотеку SAPUI5 сначала загрузить OData.

Сделать вид занятым - это вариант, но затем я должен использовать эту функцию от Component.js до контроллера.

+0

Как я знаю, вы не можете предотвратить рендеринг, и единственным решением является использование функции setBusy, и, как вы упомянули, он недоступен в Component.js. В чем проблема переноса кода на ваш первый контроллер, например, 'App.controller.js'? –

+0

Просто интересно, что если мы будем называть синхронный запрос на событие жизненного цикла: onBeforeRendering of view? –

+0

Создайте пустой вид, который запускает загрузку вашей модели, и когда она будет выполнена, используйте маршрутизатор для перехода к реальному виду. –

ответ

0

Я предполагаю, что вы определили корневой режим (обычно «App.view.xml», который невидим) и первый осмысленный вид (обычно с пустым хэшем). Когда приложение запустится, компонент сначала создаст корневой режим. После этого, прежде чем вы инициализируете маршрутизатор для отображения первого значимого представления, вы можете отправить запрос на свой материал i18n, а затем вызвать component.getRouter().initialize() в обратном вызове успеха, когда все будет сделано.

Вы все еще можете отобразить BusyIndicator, пока не получите данные, чтобы пользователь не смотрел на белую страницу все время.