Как реализовать привязку данных в SAPUI5 при использовании XML-представлений?

в SAPUI5 привязка модели или данных к таблице или чему-то еще очень проста при использовании JS-Views. Но как я могу это сделать при использовании XML-представлений?

<?xml version="1.0" encoding="UTF-8" ?>
<core:View
    xmlns:core="sap.ui.core"
    xmlns="sap.ui.commons"
    xmlns:table="sap.ui.table"
    xmlns:html="http://www.w3.org/1999/xhtml"
    controllerName="view.Main">
    <Panel text="Hello World from an XML view">
        <Button text="Button" press="doSomething"></Button>
        <table:Table width="100%" visibleRowCount="5" selectionMode="Single" editable="false">
            <table:title><Label text="Wochentage"></Label></table:title>
            <table:Column>
                <Label text="ID" />
                <table:template><TextField value="{id}"></TextField></table:template>
            </table:Column>

        </table:Table>
    </Panel>
</core:View>

Я не хочу давать таблице атрибут fix id и реализовывать его, вызывая

sap.ui.getCore().getElementById("idProductsTable").setModel(

            demoJSONModel);

в контроллере... :(


person monavari-lebrecht    schedule 14.05.2014    source источник
comment
Вы спрашиваете, как установить модель в таблице или как связать, скажем, записи в модели со строками в таблице?   -  person qmacro    schedule 15.05.2014
comment
Я не знаю, как сделать оба. Но привязка важнее из-за того, что связанная модель будет искаться в DOM, если я использую идентификатор модели.   -  person monavari-lebrecht    schedule 15.05.2014


Ответы (1)


Обычно вы устанавливаете модель для элемента управления (непосредственно таблицы или одного из ее родителей) в контроллере. Поэтому я предполагаю, что вас интересует последняя часть вашего исходного утверждения: «назначение привязки данных к таблице... при использовании XML-представлений».

Все, что вам нужно сделать, это выразить агрегацию в виде XML-атрибута. Итак, если ваша demoJSONModel выглядит так:

var demoJSONModel = new sap.ui.model.json.JSONModel({
  data : [
    { id : 42 },
    { id : 1.618 },
    { id : 3.14 }
  ]
});

то вы можете установить привязку для агрегации строк таблицы следующим образом:

<table:Table
  width="100%"
  visibleRowCount="5"
  selectionMode="Single"
  editable="false"
  rows="{/data}">

Я собрал пример в JSBin, который показывает это.

person qmacro    schedule 15.05.2014
comment
Спасибо вам за вашу работу. Ваш пример, кажется, работает, но я все еще не могу заставить его работать на моем собственном примере...;) - person monavari-lebrecht; 15.05.2014
comment
Когда я прикрепляю модель непосредственно к представлению, я могу назначить путь через атрибут rows. Это верно, и теперь я также заставил его работать в моем собственном примере, хотя атрибут rows недействителен, насколько я могу видеть с помощью xsd. Но когда я пытаюсь включить имя модели, например rows={Menus›/data}, это не работает: jsbin.com/vocusimi/1/edit - person monavari-lebrecht; 15.05.2014
comment
Вам нужно указать имя модели в каждой привязке, поэтому это ‹TextField value={id}› должно быть таким: ‹TextField value={Numbers›id}›. - person qmacro; 16.05.2014
comment
Вот рабочий пример JSBin для синтаксиса именованной модели: jsbin.com/gonafa/ 1/изменить?html,js,вывод - person Guillaume; 03.02.2015