#sapui5
#sapui5
Вопрос:
У меня есть следующая кодировка в моем контроллере приложений SAP UI5:
var myView = this.getView();
var data1 = { "myDate": new Date() };
oModel.loadData("products.json");
oModel.setData(data1);
myView.setModel(oModel);
Где продукты.json — просто простые данные для таблицы на экране.
И я вижу только продукты.в результате на экране появляются данные в формате json и myDate с пустым значением внутри oModel
(проверено в debug).
В случае, если я комментирую строку loadData, значение myDate отображается на экране и выглядит хорошо.
Как я могу использовать их вместе? Какова наилучшая практика для таких случаев?
Ответ №1:
Модель loadData
является асинхронным процессом, поэтому он обновит модель после того, как вы установите ее синхронно с data1
. Кроме того, setData()
все, что уже есть в модели, будет стерто, поэтому лучше используйте setProperty
и обновляйте только определенный узел в вашей модели.
Вы должны добавить статические данные после того, как вы загрузили их из файла:
oModel.attachRequestCompleted(function() {
oModel.setProperty("/myExtraData", data1);
});
Затем добавленная вами дата будет доступна через /myExtraData/myData
Ответ №2:
Объедините новые данные с существующими с помощью bMerge
параметра setData()
.
oModel.loadData("products.json");
var data1 = {
"myDate": new Date()
};
oModel.attachRequestCompleted(function() {
oModel.setData(data1, true);
});
Комментарии:
1. Я знал о опции bMerge, но она не работает без функции attachRequestCompleted. Ваш пример отлично работает, большое вам спасибо!
Ответ №3:
В API loadData
также есть bMerge
опция.
oModel.setData({ myDate: new Date() });
oModel.loadData("products.json", null, true, "GET", /*bMerge*/true);
// Merged results: { myDate: /*date object*/, produces: [/*...*/] }
Нет необходимости регистрировать обработчик событий для requestCompleted
.