如何在没有oEvent的情况下处理调用函数

时间:2018-11-28 06:28:30

标签: sapui5

我有一个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
  }
  // ...
},

3 个答案:

答案 0 :(得分:1)

如果您为复选框分配了ID,则只要您在视图中知道该功能,就可以在所需的任何功能中使用该复选框。这样,您将不需要仅在执行复选框上的事件时可用的oEvent。

示例:

import boto3
import logging

#setup simple logging for INFO
logger = logging.getLogger()
logger.setLevel(logging.INFO)

#define the connection
ec2 = boto3.resource('ec2')



def lambda_handler(event, context):
# Use the filter() method of the instances collection to retrieve
# all running EC2 instances.
filters = [{
        'Name': 'tag:AutoOff_uat',
        'Values': ['True']
    },
    {
        'Name': 'instance-state-name', 
        'Values': ['running']
    }
]

#filter the instances
instances = ec2.instances.filter(Filters=filters)

#locate all running instances
RunningInstances = [instance.id for instance in instances]

#print the instances for logging purposes
#print RunningInstances 

#make sure there are actually instances to shut down. 
if len(RunningInstances) > 0:
    #perform the shutdown
    shuttingDown = ec2.instances.filter(InstanceIds=RunningInstances).stop()
    print shuttingDown
else:
    print "Nothing to see here"

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

控制器

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

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