关闭任何对话/片段的事件

时间:2016-11-14 20:39:05

标签: sapui5

在用作对话的片段中,通常有一个取消或关闭按钮与按下事件连接。例如:

<buttons>
    <Button text="Save" press="onSaveData" type="Accept"/>
    <Button text="Cancel" press="onCancelBtn" type="Reject"/>
</buttons>

我有几个对话框出现在我正在处理的当前视图中。我想构造onCancelBtn()事件函数是通用的,所以有一个关闭函数,片段传递和关闭 - 我假设片段可以从事件参数访问,但是如何? .getView()会不会触及主视图?

以下是我目前的功能,但这是指特定的对话。

    onCancelBtn: function(oEvent){
        this._oConfirmDialog.close();
    },

如何使用oEvent获取对我要关闭的片段的引用?如果有人能指出我关于oEvent的文档,那么我可以阅读它的结构,我将不胜感激。我得到了API文档中的EventProvider但却失去了那条路径。

2 个答案:

答案 0 :(得分:2)

完全通用的方法是使用方法 getParent getMetadata 从触发事件的按钮遍历控制树到顶部,直到到达包含对话框控件你想要关闭

我更喜欢的另一种方法是以下方法。声明一个自定义数据属性,该属性包含在取消按钮处保存对话框实例的属性的名称,并在通用事件处理程序中评估此属性。

lestfreq=list(next(itertools.groupby(c.most_common()[::-1], key=lambda x:x[1]))[1])

您可以在事件处理程序中访问此自定义数据属性:

  <Button data:name="MyDialog" text="Cancel" press="onCancelDialogPressed" type="Reject"/>

如果您像这样实例化对话框,则此方法有效。您将片段存储在custom属性声明的名称下。

onCancelDialogPressed : function(event) {
   var name = event.getSource().data("name");
   if (this.fragments[name]) {
       this.fragments[name].close();
   }
}

当然,您需要在控制器中声明片段,例如在 onInit

openDialogPressed : function(event) {
   if (!this.fragments.MyDialog) {
        this.fragments.MyDialog = sap.ui.xmlfragment("..")
        this.getView().addDependent(this.fragments.MyDialog);
   }
   this.fragments.MyDialog.open();
}

答案 1 :(得分:1)

有一种更好更清洁的方法 - 在关闭事件中写下面的代码:

#define BLYNK_PRINT Serial

#include <ESP8266WiFi.h>
#include <ArduinoJson.h>
#include <BlynkSimpleEsp8266.h>

String json;
char auth[] = "";
char ssid[] = "YourNetworkName";
char pass[] = "YourPassword";

BLYNK_WRITE(V0) {
  json = param.asStr();
}

void setup() {
  Serial.begin(9600);
  Blynk.begin(auth, ssid, pass);
}

void loop() {
  Blynk.run();
  Blynk.virtualWrite(V0, "https://api.bot-dev.org/time/");
  JsonObject& root = jsonBuffer.parseObject(json);
  long time = root[String("ENtime")];
}