Вызов функции контроллера из выражения привязки XML

используя OpenUI5 / SAPUI5, в документации на XML-выражения привязки, у нас есть возможность выполнить функцию из представления.

new sap.m.CheckBox({
    selected: "{= checkSelectedItems(${odata>CustomerId}) }"
})

в моем контроллере за видом:

checkSelectedItems: function(sCustomerId) {
    return true;
}

на мой взгляд, я получаю общую ошибку, как будто она не может найти мою функцию:

Uncaught TypeError: Cannot read property 'apply' of undefined

Я попытался вызвать функцию несколькими способами:

{= .checkSelectedItems() }
{= my.namespace.checkSelectedItems() }

Я даже попытался добавить функцию в тег скрипта на моей странице индекса, чтобы увидеть, только ли это имеет доступ к глобальным функциям, но я также не смог вызвать это. Предложения? Я неправильно интерпретирую документацию?

пожалуйста, смотрите JS Bin здесь:http://jsbin.com/sosotacihi/edit?html, выход. Я прокомментировал флажок, который имеет проблему, но если вы поместите его, вы увидите ошибку.

3 ответов


вам нужно использовать formatter для вызова методов контроллера из представления XML.

 new sap.m.CheckBox({
     selected: "{parts:['odata>CustomerId'], formatter:'.checkSelectedItems'}"
 });

Это может быть применено к любому атрибуту запуска события. Общий способ упомянуть это:

{parts:['<parameter1>', '<parameter2>', ...], formatter:'.<methodInController>'}

UI5 предлагает использовать привязку выражений вместо функций форматирования. Привязка выражения в основном для XML-представлений, а не для представлений JS.


чтобы повторно использовать функцию контроллера в привязке выражения, там также работает сложный синтаксис привязки:

selected="{= ${parts: [{path: 'myModel>property'}], formatter: '.myMethodInController'} === 'foo'}"

в настоящее время он работает только тогда, когда parts:[{path: ...}] включен. Но, конечно, то, что он работает, не означает, что мы должны его использовать. Как вы можете видеть, такая привязка выражения может быстро стать нечитаемой.
UI5 предлагает придерживаться функции форматирования, если привязка выражения становится трудной для чтения.

мы рекомендуем использовать formatter функции вместо очень сложных и трудночитаемых выражений.

зацените документация.


синтаксис someFn(...) в выражении привязка работает только если someFn является одним из глобальных символов, таких как Math.max(...) или isNaN(...).