在表达式绑定中使用自定义全局函数

时间:2016-05-27 13:18:30

标签: javascript sapui5

我看到了如何使用表达式绑定。

https://sapui5.netweaver.ondemand.com/docs/guide/daf6852a04b44d118963968a1239d2c0.html

我可以使用一小部分函数调用(您可以使用通过全局符号提供的函数,例如Math.max(...)或isNaN(...)。

我有我的自定义函数isVisible(sParam)但是我希望将sParam值直接写入xml代码( sParams永远不在模型中),类似这样的

visible='{=isVisible('01 03 05 06')}'

我的想法是将isVisible定义为全局函数,但在调试程序时不要越过函数代码

window.isVisible = function (sParam) {
    ...
};

这是Text string as params in a formatter function

的双重问题

1 个答案:

答案 0 :(得分:1)

只允许使用特定的全局对象和函数。您可以在sourcecode中看到一个列表,该列表应该是您提供的文档链接中的全局符号列表。

但我刚才有一个想法:

  

成员访问运营商。操作

您可以创建一个'实用程序' JSONModel包含函数。 JSONModel只接受任何javascript对象,并通过绑定路径和数据绑定提供访问权限。因此,您可以通过/访问根对象,并在结果对象上调用函数:

onInit:function(){
  var utility = {
    isEven: function(x){
      return x % 2 === 0;
    }
  };
  this.getView().setModel(new JSONModel(utility), "utility");
}
<Button text="Hello 1" visible="{:= ${utility>/}.isEven(1) }"/>
<Button text="Hello 2" visible="{:= ${utility>/}.isEven(2) }"/>

您甚至可以通过关闭来访问控制器。

当然,您可以在更高级别(Component或甚至Core)定义该实用程序模型。您可以拥有许多实用新型,并且可以在表达式中混合模型:visible="{= ${utility>/}.doSomething(${bla>/blub}, 42) }(未尝试过)。

请参阅Plunker以获取示例