Привязка данных 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}"/>

если его только один объект в макете. если не работает, поместите код контроллера, где вы устанавливаете модель для представления

Другие вопросы по тегам