我想将
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 示例:输入 - 值更新 一切正常,但它们使用常规视图,而不是基于片段的对话框。
为了启用在片段定义中分配的触发事件处理程序,在调用创建片段的 API 时应传递控制器实例(或包含处理程序的普通对象)。
将
this
作为当前控制器实例的引用:
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
。
Component#runAsOwner
包裹。
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
}));
sap.ui.xmlfragment
sap.ui.xmlfragment(this.getView().getId(), "my.Fragment", this); // Deprecated!
相关文档主题:片段的实例化