2016-10-27 4 views
0

Внутри функции onBeforeRendering() представления, как я должен определить, присутствует ли конкретный узел в модели и модифицировать модель, чтобы включить узел, если нет? Этот вопрос связан с ленивой загрузкой данных в модель для данных, которые будут редко доступны пользователям, но будет иметь ограничение производительности при загрузке исходных данных модели.Лучшая практика для ленивых данных загрузки на вкладке

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

Элементы управления вкладками посредством маршрутизации стиля manifest.json для отображения вида в области содержимого вкладок.

Это мой текущий рабочий код, который находится в случае onBeforeRendering контроллера вида:

onBeforeRendering: function(oEvent){ 

var sPath = this.getView().getBindingContext("Projects").getPath(); // something like /task/6 
console.log('Path='+sPath) 

var oModel = this.getView().getModel("Projects"); 
var oTask = oModel.getProperty(sPath + "/brief"); 
if (oTask) { // looks like /brief exists so must already have loaded the brief 
    // nothing to do 
    console.log('Use existing data') 
} 
else { // /brief not yet present so we need to load it up 
    console.log('Load new data') 
    oModel.setProperty(sPath + "/brief", "This is the brief...") // replace with loaddata() from server, use attachRequestCompleted to call function to modify model. 
}} 

Вопрос - это правильный подход?

Редактировать: Основано на обсуждении в this question Я изменил свой код, чтобы использовать событие, которое срабатывает за отображение вида. onBeforeRendering оказался без заметной предсказуемости, что, я уверен, есть, но в любом случае мне нужно событие с одним дисплеем. Кроме того, я конкретизировал код дальше, но сохранил базовую структуру и, похоже, делает то, что хотел.

ответ

1

Это действительный подход. Но вы должны подумать о следующем случае: что произойдет, если данные, которые вы загрузили, были изменены на бэкэнд? JSONModel не дает вам никакой поддержки здесь, поскольку он работает только с немым хранилищем данных.

+0

Спасибо. Что касается JSONModel, основанного на тяге, я согласен. Можете ли вы предложить лучший подход, обеспечивающий синхронизацию между клиентом и сервером? Мой случай использования не влияет на ваш вопрос, но я признаю, что другие, кого я ударил, скоро будут. Так в чем же лучшая практика? Насколько мне известно, популярные библиотеки MVC преимущественно одобряют JSON, поэтому это должна быть общая проблема. –

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