2016-12-13 10 views
0

Я пытаюсь получить модель OData изнутри функции onInit с контроллера в SAPUI5 для хранения свойства в локальной переменной. Я попытался следующие без успеха:Извлечь объект модели OData из контроллеров onInit function

var oModel = this.getView().getModel(); // returns undefined 
var oModel = sap.ui.getCore().getModel(); // returns undefined 

Это похоже на модель еще не установлена, когда OnInit работает. Из-за этого, я попытался:

var oModel = this.getOwnerComponent().getModel(); // returns empty odata object 
var value = oModel.getProperty("/Collection/Property"); // returns undefined 

Тот же самый код работает просто отлично во всех других функций, кроме OnInit, но мне нужно это внутри этой функции.

Как получить модель и свойство в onInit?

+0

В моих примерах работы я использую this.getModel («ModelName»); и он отлично работает. Вы пытались, возможно, назвать свою модель, прежде чем пытаться ее получить? – wdoering

+0

Да, я попробовал назвать модель. Не имеет значения. Вы вызываете модель изнутри onInit? – Chessinio

+0

О моделях undefined: https://stackoverflow.com/a/42251431/5846045 Об извлечении OData: https://stackoverflow.com/a/46662969/5846045 Довольно многое, что [ответ matbtt] (https: // stackoverflow.com/a/41120840/5846045) уже упомянутый. Я бы предложил принять его ответ, чтобы сообщить другим, что этот вопрос решен. – boghyon

ответ

0

Работает так, как ожидалось. Пожалуйста, проверьте documentation о инициализации приложения.

Я предполагаю, что это связано с тем, как работает модель распространения. Модель, созданная компонентом, распространяется на ее представления, если у конкретного представления нет модели с тем же именем. Обычно вы создаете конкретные модели для просмотра в onInit, то есть среда выполнения знает все определенные модели только после того, как onInit был выполнен.

Обычно вы должны быть в состоянии получить компонентные модели в OnInit через:

this.getOwnerComponent().getModel() 

Update: Насколько я знаю, GetProperty не вызывает чтения автоматически. Таким образом, вы должны сделать это свой собственный (documentation):

this.getOwnerComponent().getModel().read(path, paramaters); 

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

+0

Хорошо, чтобы это было подтверждено! Но должна быть возможность использовать модель из onInit(). Вы знаете, как это сделать? Любые обходные пути? – Chessinio

+0

Обновлен мой ответ. Работает ли this.getOwnerComponent(). GetModel()? – matbtt

+0

this.getOwnerComponent(). GetModel() возвращает правильный объект модели odata, но пока не заполнен данными. Он возвращает пустую модель. Похоже, модель заселяется после onInit(). Модель создается в манифесте. Json. – Chessinio