这是一个老问题,但是从版本1.56开始,XML Views现在原生支持直接传递参数给处理程序函数。
新的事件处理程序参数语法
当将事件处理程序分配给XML视图中的控件事件时,您现在可以指定可以传递给事件处理程序的参数。这些参数可以是静态值、绑定甚至表达式。此功能有助于减少控制器代码并避免不必要的控制器方法,并将控制器逻辑与所需输入值的检索分开。
因此,您现在可以简单地执行此操作:
<Button text="click" tap=".callFunction($event, 'mycustomString')" />
请注意,一旦您传递至少一个参数,事件本身将不再自动传递,因此您需要通过传递
$event
来手动完成,就像我上面做的那样。但是,还有其他语法可直接传递事件参数、源控件和数据绑定,因此您可能根本不需要事件。
该功能的文档可以在线查看Demo Kit中的
文档。
简短演示:
sap.ui.define([
"sap/ui/core/mvc/Controller"
], function(Controller) {
"use strict";
return Controller.extend("myController", {
callFunction: function(sButtonText, sVal) {
alert("Clicked " + sButtonText + " with value " + sVal);
}
});
});
sap.ui.xmlview({
viewContent: $('#myView').html()
}).placeAt('content');
<html>
<head>
<meta charset="utf-8">
<script id='sap-ui-bootstrap' src='https://sapui5.hana.ondemand.com/resources/sap-ui-core.js' data-sap-ui-libs='sap.m'></script>
<script id="myView" type="sapui5/xmlview">
<mvc:View controllerName="myController" xmlns:mvc="sap.ui.core.mvc" xmlns="sap.m">
<Button text="Button 1" press=".callFunction(${$source>/text}, 'ABCDEF')" />
<Button text="Button 2" press=".callFunction(${$source>/text}, 'UVWXYZ')" />
</mvc:View>
</script>
</head>
<body class='sapUiBody'><div id='content'></div></body>
</html>