SAPUI5 - как установить значение для входного параметра при динамической привязке

В моей службе XSOData у меня есть объект, основанный на представлении расчета с входными параметрами. Я могу установить эти параметры как константы в моем представлении XML, т.е.

<List items="{dicts>/AncParams(p_dict_name='GROUPS',p_rec_id=2)/Results}" >
        <StandardListItem
          title="{dicts>NAME}"
          />
    </List>

и это будет работать нормально.

Но как я могу динамически установить параметры p_dict_name и p_rec_id? Я пытался использовать привязки выражений для получения значений параметров из другой модели (что-то вроде этого: <List items="{= ${dicts>/AncParams(p_dict_name='GROUPS',p_rec_id=${DictUIProps>/parentId})/Results} }" >), но безуспешно. Насколько я понимаю, привязки выражений работать не будут. Есть ли другой способ?


person Lev83    schedule 22.04.2018    source источник
comment
Я думаю, что это путь. Прочтите его, сохраните эти значения (в виде общего списка) и примените фильтр с помощью java-скрипта. Значит привязка выражений к списку через локальную модель корректна, но без этих фильтров в выражении. будет сложно с выражением, но в любом случае это должно быть возможно help.sap.com/doc/saphelp_pobuilder10/1.0.05/de-DE/da/   -  person dotchuZ    schedule 22.04.2018


Ответы (1)


Насколько мне известно, вы не можете выполнять динамическую привязку агрегации через XML. По крайней мере, не в тех версиях, которые я использовал, и я должен признать, что давно не проверял. Строка никогда не интерпретируется для внутренних привязок до того, как она будет применена к модели.

Я делаю это через контроллер:

<List id="myList" />

и в вашем контроллере (onBeforeRendering или onPatternMatched или там, где ваша модель и представление известны контроллеру):

this.getView().byId('myList').bindItems({
  model: 'dicts',
  path: `{/AncParams(p_dict_name='${p_dict_name}',p_rec_id=${p_rec_id})/Results}`,
  template: new sap.m.StandardListItem({
    title: '{dicts>NAME}'
  })
});

вы можете использовать функцию getModel('dicts').createKey для создания имени пути, которое, я полагаю, немного чище.

Это также способ применить динамические фильтры, если вы когда-нибудь их создадите.

person Jorg    schedule 23.04.2018
comment
Моя используемая версия 1.28. Что ж, я написал этот код только для целей тестирования, на самом деле я хочу использовать этот подход в своем пользовательском элементе управления (он также будет иметь агрегацию items). Правда ли, что я должен переопределить onBeforeRendering в своем пользовательском элементе управления и привязать items агрегацию в этом методе, как в вашем фрагменте кода? - person Lev83; 23.04.2018
comment
В пользовательском элементе управления я обычно делаю что-то и в методе onBeforeRendering, да, но это немного зависит от того, что вы пытаетесь сделать. Вы расширяете список и предоставляете параметр dict_name? - person Jorg; 24.04.2018
comment
Я хочу сделать панировочные сухари с некоторыми аугментами. В элементе мне нужна ссылка + значок, поэтому это будет BreadcrumbItem, расширяющий sap.m.Link. Для контейнера я планирую создать Breadcrumb, который расширяет Control и содержит агрегацию items и агрегацию root. - person Lev83; 24.04.2018