如何处理没有oEvent的函数调用

问题描述 投票:1回答:3

我有一个CheckBox,其中有一个附加到select事件的处理程序。在这个函数中是动态填充/显示几个字段的代码。如果我进入屏幕并且数据带来一个使复选框已经选中的值,那么这些字段就不会显示(因为只有当我选中复选框时它们才会显示)。

我想确保如果自动选择CheckBox,我仍然可以处理函数中的逻辑,该函数将oEvent作为输入参数。但问题是,如果我从另一个方法调用此函数,该函数不起作用,因为它有许多语句,如oEvent().getSource(),我没有通过。

Controller.js

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
  }
  // ...
},
sapui5
3个回答
0
投票

将处理程序主体解耦为单独的函数,以便其他函数可以使用正确的参数调用解耦函数。例如:

Controller

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) {
    // ...
  }
},

View

<CheckBox id="myCheckBox"
  select=".onCheckBoxSelect"
/>

或者从1.56开始:

<CheckBox id="myCheckBox"
  select=".doIt(${$parameters>/selected})"
/>

文件:Handling Events in XML Views

通过这种方式,您可以拥有一个可以从任何地方调用的纯粹的解耦函数。


1
投票

如果您为复选框指定了ID,只要在视图中已知,您就可以在所需的任何功能中获取复选框。通过这样做,您将不需要仅在执行复选框上的事件时才可用的oEvent。

例:

var cb = this.byId('checkboxId');
if(cb.getProperty('selected')) {
  // execute code
} else {
  // do something else
}

0
投票

我建议采用不同的方法。使用您在复选框绑定中使用的相同属性来确定其他字段的可见性,即将每个相关字段的visible属性绑定到模型中的该属性。

如果在填充字段时需要额外的后处理,您可以使用expression bindingcustom formatter进行特定于字段的处理,如果需要进行更多“暂存”工作,则可以使用model binding events(在这种情况下,您可能会存储结果)客户端模型中的数据并绑定到用于填充字段的数据)。

© www.soinside.com 2019 - 2024. All rights reserved.