2016-08-19 2 views
0

У меня возникают проблемы с привязкой данных к простой форме. Я использую макет сервера и успешно привязать данные к списку/таблицеSAPUI5 привязка данных к SimpleForm

Мой manifest.json выглядит следующим образом

"mock": { 
    "dataSource": "mainService" 
} 

Мой mockdata (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}"/> 

Что мне не хватает?

ответ

1

Вы, кажется, используете ODataModel. В ODataModels привязка к коллекциям/агрегациям не так проста, как с JSONModel. Вы не можете получить доступ/связывать свойства с помощью синтаксиса collection/index/property.

Как ODataModels хранить данные

Если загрузить множество сущностей, как ваши UserDetailSet данные, хранящиеся в вас ODataModel нравится выглядеть примерно так:

{ 
    UserDetailSet('00001'): { ... }, 
    UserDetailSet('00002'): { ... }, 
    UserDetailSet('00003'): { ... }, 
    UserDetailSet('00004'): { ... } 
} 

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

Свойство Binding на 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 Крис

+0

Hi Спасибо за помощь. Все еще не работает, но благодарит за воспитательный ответ. Привет –

+0

Может быть оставить немного больше кода – cschuff

+0

Привет Кроме того, что в начальном посте у меня есть следующие Manifest "DataSources": { \t \t \t "mainService": { \t \t \t \t " URI ": "/ здесь/идет/ваш/serviceUrl /", \t \t \t \t "типа": "OData", \t \t \t \t" Setti NGS ": { \t \t \t \t \t "Аннотации": [], \t \t \t \t \t "odataVersion": "2,0", \t \t \t \t \t "localUri": "LocalService/metadata.xml" И список ниже моих полей формы, который фактически отображает данные на основе макетного сервера. У меня нет кода в событии init моего контроллера представления. Я попробовал ваш код, как этот this.getView() byId ("MyForm") bindElement ({ путь: "/ UserDetailSet ('00001')", модель: "издеваться"}).. Привет –

0

связывание должно быть, как это

<Label text="Name" /> 
<Input value="{mock>Name}" /> 
<Label text="Surname" /> 
<Input value="{mock>Surname}"/> 

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

+0

Привет Спасибо за вашу помощь. Пробовал ваше предложение привязки, но он не работал. Что именно вы подразумеваете под «поместите код контроллера, где вы устанавливаете модель для представления». Это то, что вы имеете в виду или как это сделать ?: onInit: function {// View Controller this.getView.setModel ('mock'); .... Спасибо –

+0

Хорошо, тогда у модели есть список .. Затем перейдите в mock>/0/name – chiranjeevigk

+0

Спасибо. Я уже пробовал, что и он не работал. Спасибо за вашу помощь –

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

  • Нет связанных вопросов^_^