Привязка данных SAPUI5 в SimpleForm
У меня возникли проблемы при попытке связать данные в простой форме. Я использую фиктивный сервер и успешно связал данные со списком / таблицей
Мой manifest.json выглядит так
"mock": {
"dataSource": "mainService"
}
Мои макеты (UserDetailsSet.json) выглядят так
[{
"ID_PassNum": "cu001",
"Title": "Mr",
"Name": "Don",
"Surname": "Ownery",
"ResType": "SA",
"Country": "South Africa"
}]
Мои поля SimpleForm выглядят так
<Label text="Name" />
<Input value="{mock>/UserDetailsSet/0/Name}" />
<Label text="Surname" />
<Input value="{mock>/UserDetailsSet/0/Surname}"/>
Что мне не хватает?
2 ответа
Вы, кажется, используете ODataModel
, В ODataModels связывание с коллекциями / агрегатами не так просто, как с JSONModel. Вы не можете получить доступ / связать свойства с collection/index/property
синтаксис.
Как ODataModels хранит данные
Если вы загружаете набор сущностей, как ваш UserDetailSet
данные, хранящиеся в вашей ODataModel, выглядят примерно так:
{
UserDetailSet('00001'): { ... },
UserDetailSet('00002'): { ... },
UserDetailSet('00003'): { ... },
UserDetailSet('00004'): { ... }
}
В то время как "00001" и т. Д. Является ключом сущностей. Если вы создаете привязку агрегации на UserDetailSet
ODataListBinding будет обрабатывать перевод указанных данных в контекст для каждого элемента.
Привязка свойств к ODataModel
Ваша привязка должна выглядеть так:
<Label text="Name" />
<Input value="{mock>/UserDetailSet('00001')/Name}" />
<Label text="Surname" />
<Input value="{mock>/UserDetailSet('00001')/Surname}"/>
Динамическое связывание свойств в ODataModel
Или - чтобы быть немного более динамичным - привязка, как это (Примечание: привязки теперь относительны, без ведущих /
):
<SimpleForm id="MyForm">
<Label text="Name" />
<Input value="{mock>Name}" />
<Label text="Surname" />
<Input value="{mock>Surname}"/>
</SimpleForm>
и динамически использовать bindElement
на самой SimpleForm:
this.getView().byId("MyForm").bindElement({
path: "/UserDetailSet('"+ sUserID +"')",
model: "MyOdataModelID",
// use OData parameters here if needed
parameters: {
"expand": "UserAdress"
},
// react on binding events here
events: {
change: function (oEv) { },
dataRequested: function (oEv) { },
dataReceived: function (oEv) {}
}
});
BR Крис
Привязка должна быть такой
<Label text="Name" />
<Input value="{mock>Name}" />
<Label text="Surname" />
<Input value="{mock>Surname}"/>
если его только один объект в макете. если не работает, поместите код контроллера, где вы устанавливаете модель для представления