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

问题描述 投票:0回答:1

我想将

liveChange
事件附加到可重用的基于
Input
Fragment
Dialog
字段(演练步骤 19:重用对话框)。

在 XML 模板中

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 示例:输入 - 值更新 一切正常,但它们使用常规视图,而不是基于片段的对话框。

javascript sapui5
1个回答
6
投票

为了启用在片段定义中分配的触发事件处理程序,在调用创建片段的 API 时应传递控制器实例(或包含处理程序的普通对象)。

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

自 UI5 1.93 起:
Controller#loadFragment
(推荐)

this.loadFragment({ name: "my.Fragment" }); // See API reference for more options

在上述 API 中,

id
controller
分别是
this.getView().getId()
this
默认。作为奖励,加载的片段也会自动添加到视图的
<dependents>
聚合中(除非
addToDependents: false
)。创建的 ManagedObject 还包含 所有者 ID ,框架可以使用它应用任何现有扩展 - 无需显式地用
loadFragment
包装
sap.ui.core.Component#runAsOwner


对于较旧的 UI5 版本或控制器无法访问

⚠️ 要启用扩展,以下 API 必须

Component#runAsOwner
包裹。

自 UI5 1.58 起:
Fragment.load

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

UI5 1.56 及以下版本:
sap.ui.xmlfragment
(已弃用)

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

相关文档主题:片段的实例化

© www.soinside.com 2019 - 2024. All rights reserved.