我有一个CheckBox,其中有一个附加到select
事件的处理程序。在这个函数中是动态填充/显示几个字段的代码。如果我进入屏幕并且数据带来一个使复选框已经选中的值,那么这些字段就不会显示(因为只有当我选中复选框时它们才会显示)。
我想确保如果自动选择CheckBox,我仍然可以处理函数中的逻辑,该函数将oEvent
作为输入参数。但问题是,如果我从另一个方法调用此函数,该函数不起作用,因为它有许多语句,如oEvent().getSource()
,我没有通过。
onCheckBoxSelect: function(oEvent) {
var cells = sap.ui.getCore().byId("cell");
controlCell.destroyContent();
vc.abc();
var material= sap.ui.getCore().byId("abc");
var isSelected = oEvent.getParameters("selected").selected;
if (isSelected) {
// ...
}
},
someFunction : function(){
if(true){
// want to call onCheckBoxSelect here
}
// ...
},
将处理程序主体解耦为单独的函数,以便其他函数可以使用正确的参数调用解耦函数。例如:
onCheckBoxSelect: function(oEvent) {
const bSelected = oEvent.getParameter("selected");
this.doIt(bSelected); // Instead of "doing it" all here
},
someFunction: function(){
if (/*Something truthy*/) {
const checkBox = this.byId("myCheckBox");
const bSelected = checkBox.getSelected();
doIt(bSelected); // passing the same argument as in onCheckBoxSelect
}
// ...
},
doIt: function(bSelected) { // decoupled from onCheckBoxSelect
// ...
if (bSelected) {
// ...
}
},
<CheckBox id="myCheckBox"
select=".onCheckBoxSelect"
/>
或者从1.56开始:
<CheckBox id="myCheckBox"
select=".doIt(${$parameters>/selected})"
/>
文件:Handling Events in XML Views
通过这种方式,您可以拥有一个可以从任何地方调用的纯粹的解耦函数。
如果您为复选框指定了ID,只要在视图中已知,您就可以在所需的任何功能中获取复选框。通过这样做,您将不需要仅在执行复选框上的事件时才可用的oEvent。
例:
var cb = this.byId('checkboxId');
if(cb.getProperty('selected')) {
// execute code
} else {
// do something else
}
我建议采用不同的方法。使用您在复选框绑定中使用的相同属性来确定其他字段的可见性,即将每个相关字段的visible
属性绑定到模型中的该属性。
如果在填充字段时需要额外的后处理,您可以使用expression binding或custom formatter进行特定于字段的处理,如果需要进行更多“暂存”工作,则可以使用model binding events(在这种情况下,您可能会存储结果)客户端模型中的数据并绑定到用于填充字段的数据)。