Я застрял в том, возможно ли понятие в SAPUI5, и поскольку документы могут быть немного трудными для работы на этом уровне детализации, я задаю этот вопрос ранее в мой путь исследования, чем обычно. В основном я не хочу тратить слишком много времени, если есть немедленный ответ «Нет».Можно ли использовать 2 модели в одном представлении
У меня есть использование случай зрения, что является мастер-деталь, используя модель JSON, но я должен производить свои собственные элементы управления - я не могу использовать SplitApp и т.д.
Модель эффективно 2-слойное глубокое дерево, ведущее к деталям. Концептуально, как это:
{
"master": [
{
"name": "Master 1",
"detail" : [
{
"name": "Detail 1-1"
},
{
"name": "Detail 1-2"
}
]
},
{
"name": "Master 2",
"detail" : [
{
"name": "Detail 2-1"
},
{
"name": "Detail 2-2"
}
]
}
]
}
УБ является то, что будет выбирать список мастеров и когда выбор сделан контрольный список деталей будет обновляться, чтобы показать детали, которые являются потомками выбранного мастера.
Я знаком с привязкой модель к представлению с помощью
sap.ui.getCore().setModel(oModel)
this.getView().setModel(oModel)
, но это связывает все элементы управления с точки зрения одной модели, по моему обучению на сегодняшний день.
варианты я думаю, может быть стоит следовать являются:
- Bind отдельная модель для каждого из элементов управления главной и подчиненной и писать собственный код, чтобы перейти из детальной-модели при выборе мастера. Но как сделать такие привязки;
- Используйте одну модель, но каким-то образом установите элемент управления деталями, чтобы распознать мастер текущего выбора.
- Используйте какой-то фильтр для управления деталями.
Объясняя 2 далее, если сказать, что я использовал таблицу для отображения подробно я мог бы иметь в таблице Защиту
<Table
id="detailList"
items="{
path: '/'
}",
...
>
Так что я смотрел бы, чтобы изменить путь к чему-то вроде
path: '/master[n]/detail/'
где n представляет выбранный основной экземпляр.
Возможно, или есть другая альтернатива, или я должен отказаться.
EDIT: Я нашел это потенциальное решение на основе фильтра на Michael Herzog here. Его описание:
я дам вам пример, как можно реализовать отношения matser-деталь в SAPUI5.
Использование: когда пользователь нажимает на клиента в первой таблице, все соответствующие заказы должны отображаться во второй таблице. Заказы от других клиентов должны быть скрыты.
Таким образом, по нашему мнению, у нас есть две таблицы:
Таблица: Клиенты
Таблица: Заказы
После создания обеих таблиц и настроить привязку данных , осуществить этот обработчик событий на первом столе:
oTableClients.attachRowSelectionChange(function(oEvent){
// first, we fetch the binding context of the selected row
var selectedRowContext = oEvent.getParameter("rowContext");
// get the ID of the customer via rowContext. The model-object represents the data of the first table
var selectedClientId = oModel,getProperty("id", selectedRowContext);
// get binding of second table
var ordersBinding = oTableOrders.getBinding();
//create new filter to show the relevant data for the selected customer
var oFilter = new sap.ui.model.Filter("clientId", sap.ui.model.FilterOperation.EQ, selectedClientId);
// apply filter to binding
ordersBinding.filter([oFilter]);
});
Я вижу, что этот подход жизнеспособен для меня - есть ли причина, почему этот шаблон в корне ошибочен?
Thanks Matbtt - Я буду работать над этим и отчитываться. И спасибо за примеры setModel() - полезное напоминание и полезно для будущих посетителей. –
OK - применил подход в вашем ответе, и он хорошо работает. Я сделал одно изменение, которое должно было включать сортировку в определение привязки деталей, чтобы оно выглядело так: 'items =" {path: 'detail', sortter: {path: 'name'}} "'. Это нужно, чтобы отсортировать данные по атрибуту 'name'. Не упоминается как вопрос в исходном вопросе, но полезно отметить формат. –