XML 片段中分配的方法未触发

Methods assigned in XML fragment not triggered

我想将 liveChange 事件附加到可重复使用的基于 FragmentDialog (Walkthrough Step 19: Reuse Dialogs) 的 Input 字段。

在 XML-template HelloDialog.fragment.xml 我添加了:

<Input
    id = "input-b"
    type = "Password"
    liveChange = ".onLiveChange"
    placeholder = "Enter your password" />

在片段的控制器中 HelloDialog.js 我添加了:

onLiveChange: function (oEvent) {
    const sNewValue = oEvent.getParameter("value");
    this.byId("getValue").setText(sNewValue);
    console.log("sNewValue");
}

然后我在 DevTools 中在此方法中设置了一个断点,并尝试在相关 Input 中键入文本并期望断点将被触发,但没有任何反应。

我尝试将 onLiveChange 从我调用此片段的地方添加到视图的控制器中,也尝试添加到 Component.js,但仍然没有反应。

问题是为什么在我的情况下没有触发 onLiveChange?在 SAP Sample: Input - Value Update 中一切正常,但他们使用常规视图,而不是基于片段的对话框。

为了从片段中启用触发方法(例如事件处理程序、格式化程序...),控制器实例(this一个普通对象创建片段时应分配给选项 controller。使用 API loadFragment (available since 1.93),控制器实例默认添加为侦听器对象。

给定 this 作为对当前控制器实例的引用:

自 UI5 1.93

this.loadFragment({ name: "my.Fragment" });

在上面的API中,idcontroller分别默认为this.getView().getId()this。加载的片段也会自动添加到视图的 <dependents> 聚合中(除非 addToDependents: false)。无需明确分配它们。

使用loadFragment的优点在话题Instantiation of Fragments中也有提到。


从 UI5 1.58 开始

// Fragment required from "sap/ui/core/Fragment"
Fragment.load({
  id: this.getView().getId(),
  name: "my.Fragment",
  controller: this, // or a plain object that contains the event handlers
});

UI5 1.56及以下

// Deprecated!
sap.ui.xmlfragment(this.getView().getId(), "my.Fragment", this);