【问题标题】:How to handle calling a function without oEvent如何在没有 oEvent 的情况下处理调用函数
【发布时间】:2018-11-28 06:28:29
【问题描述】:

我有一个 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


    【解决方案1】:

    如果您为您的复选框分配一个 ID,您可以在任何您想要的功能中获取该复选框,只要它在视图中是已知的。通过这样做,您将不需要仅在执行复选框上的事件时才可用的 oEvent。

    例子:

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

    【讨论】:

      【解决方案2】:

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

      控制器

      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

      这样,您就可以拥有一个可以从任何地方调用的纯解耦函数。

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 2018-04-10
          • 1970-01-01
          • 1970-01-01
          • 2014-02-17
          • 1970-01-01
          • 2022-06-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多