You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取Fiori应用中第二个模型的绑定上下文?

为什么绑定命名JSON模型的控件getBindingContext返回undefined?

我来帮你分析下这个问题——你遇到的getBindingContext("localData")返回undefined的情况,其实是因为你的绑定方式导致的,咱们一步步拆解:

问题根源:绝对路径绑定不会生成绑定上下文

你在TextArea里用的是绝对路径绑定:{localData>/Text},这里的>/表示直接访问模型的根节点属性。这种绑定方式是直接指向模型的具体属性,不需要依赖绑定上下文(BindingContext),所以控件自然不会创建上下文对象,调用getBindingContext("localData")就会返回undefined。

BindingContext通常是在控件绑定到模型的某个相对路径时才会生成,比如列表项绑定到集合中的某个实体,或者控件/父容器设置了binding属性指向模型的某个节点,此时控件会基于这个节点形成上下文,后续可以用相对路径绑定子属性。

解决方案:两种方式获取数据或创建上下文

根据你的需求,有两种处理方式:

1. 直接获取值(不需要上下文)

如果你的目的只是拿到TextArea里的文本内容,完全不需要通过绑定上下文,直接从模型或者控件本身取值更简单:

onSendMail: function() {
  // 方式1:从命名模型中直接获取属性值
  const oLocalModel = this.getView().getModel("localData");
  const sText = oLocalModel.getProperty("/Text");

  // 方式2:直接获取控件的当前值(适合用户修改后的内容)
  const sTextFromControl = this.byId("zgutMailFormText").getValue();
  
  // 后续逻辑...
}

2. 创建绑定上下文(如果需要相对路径绑定)

如果你确实需要绑定上下文(比如后续要给控件的其他属性用相对路径绑定),可以通过两种方式创建:

方式A:给父容器设置绑定路径(XML中实现)

给TextArea的父容器(比如VBox、Form等)设置binding属性指向模型根节点,然后TextArea用相对路径绑定:

<VBox binding="{localData>/}">
  <TextArea 
    id="zgutMailFormText" 
    value="{localData>Text}" <!-- 去掉>/,使用相对路径 -->
  >
    <layoutData>
      <l:GridData span="XL2 L3 M3 S8" />
    </layoutData>
  </TextArea>
</VBox>

此时TextArea会继承父容器的绑定上下文,调用getBindingContext("localData")就能拿到上下文,再通过getProperty("Text")获取值。

方式B:在控制器中手动设置上下文

在onInit里给TextArea手动创建并设置绑定上下文:

onInit: function() {
  var oLocalModel = { Text: "test" };
  var oModel = new JSONModel(oLocalModel);
  this.getView().setModel(oModel, "localData");
  
  // 给TextArea创建并设置绑定上下文
  const oTextArea = this.byId("zgutMailFormText");
  const oContext = oModel.createBindingContext("/");
  oTextArea.setBindingContext(oContext, "localData");
}

之后在onSendMail中就能正常获取上下文了:

onSendMail: function(oEvent) {
  var oLocalContext = this.byId("zgutMailFormText").getBindingContext("localData");
  var sText = oLocalContext.getProperty("Text");
}

总结

简单来说,绝对路径绑定(带>/)不需要上下文,所以getBindingContext返回undefined。如果只是取值,直接从模型或控件获取更高效;如果需要上下文,就改成相对路径绑定并通过父容器或手动设置上下文。

内容的提问来源于stack exchange,提问作者tanto39

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 18:17:46