从XML绑定表达式

时间:2015-07-24 16:50:42

标签: sapui5

使用OpenUI5 / SAPUI5,根据XML Binding Expressions的文档,我们可以从视图中执行一个函数。

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,output。我已经注意到有问题的CheckBox,但是如果你把它放进去,你就会看到错误。

3 个答案:

答案 0 :(得分:2)

您需要使用formatter从XML视图调用控制器的方法。

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

这可以应用于任何事件触发属性。提到这一点的一般方法是:

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

答案 1 :(得分:0)

UI5建议使用Expression Binding而不是formatter函数。 Expression绑定主要用于XML视图,不适用于JS视图。

答案 2 :(得分:0)

要在表达式绑定中重用控制器函数,复杂的绑定语法也可以在那里工作:

parts:[{path: ...}]

目前,只有在包含someFn(...)时才有效。但当然,仅仅因为它起作用,并不意味着我们应该使用它。正如您所看到的,这样的表达式绑定很快就会变得难以理解 如果表达式绑定难以阅读,UI5建议坚持使用格式化函数。

  

我们建议使用格式化程序函数,而不是非常复杂且难以阅读的表达式。

查看此documentation

表达式绑定中的语法someFn仅在Math.max(...)是全局符号之一时才有效,例如isNaN(...)from gspread_pandas import Spread, conf c = conf.get_config('[Your Path]', '[Your filename]') spread = Spread('username', 'spreadname', config=c)