【问题标题】:Methods assigned in XML fragment not triggeredXML 片段中分配的方法未触发
【发布时间】:2020-10-26 09:50:07
【问题描述】:

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

在 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 Sample: Input - Value Update 中一切正常,但它们使用常规视图,而不是基于片段的对话框。

【问题讨论】:

    标签: javascript sapui5


    【解决方案1】:

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

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

    自 UI5 1.93

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

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

    主题Instantiation of Fragments中也提到了使用loadFragment的好处。


    自 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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多