XML 片段中分配的方法未触发
Methods assigned in XML fragment not triggered
我想将 liveChange
事件附加到可重复使用的基于 Fragment
的 Dialog
(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中,id
和controller
分别默认为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);
我想将 liveChange
事件附加到可重复使用的基于 Fragment
的 Dialog
(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中,id
和controller
分别默认为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);