DOM元素单击按钮,但不调用在控制器中为Button

时间:2019-02-04 15:57:25

标签: javascript sapui5

我需要捕获用户在SAP UI5应用上执行的事件,并在需要时回放相同的事件。

我开发了一个小型的UI5应用程序,其中几乎没有文本字段,按钮和链接。我正在使用DOM事件捕获事件。我将元素ID和命令类型(单击,输入)保存在本地JSONModel中。需要播放时,我将使用保存的数据再次执行相同的事件。

我能够捕获和回放文本输入字段,但是当我单击按钮或回放中的链接时,它单击了按钮,但是在按钮按下事件时不调用控制器中定义的功能。

有人可以帮我吗?在下面的示例中,在回放过程中,单击提交按钮可以正常工作,但不会调用控制器中定义的功能。

示例代码

查看文件已定义按钮

var Submit = new sap.m.Button("Submit", {
  text: 'Submit',
  enabled: true,
  press: function(oEvt) {
    oController.OnPressSubmit(oEvt);
  }
});

控制器已定义功能

OnPressSubmit: function(oEvt){ /* Perform action */ }

另一个.js文件注入了索引文件,捕获了如下事件

document.addEventListener("input", myInputFunction);
function myInputFunction(evt) {
  if (event.target.localName.length > 0) {
    recordingData.push({
      "type": event.target.localName,
      "command": event.type,
      "name": event.target.id,
      "value": event.target.value
    });
  }
  sendData(recordingData);
};

正在播放

function playDataBack(Data) {
  for (var i = 0; i < playbackData.length; i++) {
    if (playbackData[i].command == 'input');
    document.getElementById(playbackData[i].name).value = playbackData[[i]].value;
    if (playbackData[i].command == 'click') {
      var targBtn = document.querySelector ("#" + playbackData[i].name);
      var clickEvent = document.createEvent ('MouseEvents');
      clickEvent.initEvent ('click', true, true);
      targBtn.dispatchEvent (clickEvent);
    }
  };
}

1 个答案:

答案 0 :(得分:0)

您是否在按钮创建之外添加了以下代码?

oController = this;

完成此分配后,您可以创建按钮,并且oController将在'press'事件中显示。

var Submit = new sap.m.Button("Submit", {
  text: 'Submit',
  enabled: true,
  press: function(oEvt) {
    oController.OnPressSubmit(oEvt);
  }
});

顺便说一句,并不是说它对您的代码本身没有任何作用,但是如果您遵循命名约定,我建议您以小写字母开始函数/方法:)

K,

克里斯托夫