首页 > 解决方案 > 如何获取第二个模型的绑定上下文?

问题描述

我的 Fiori 应用程序有一个设置了两个模型的视图。第一个模型在(OData)中默认设置manifest.json,第二个模型我在控制器中设置。

第二个模型的数据显示在 中sap.m.TextArea。如果我尝试获取其绑定上下文,则输出为undefined.

这就是我设置第二个模型的方式:

onInit: function() {
  var oLocalModel = {
    Text: "test"
  };
  // JSONModel required from "sap/ui/model/json/JSONModel"
  var oModel = new JSONModel(oLocalModel);
  this.getView().setModel(oModel, "localData");
},

这就是我尝试获取 TextArea 的绑定上下文的方式:

onSendMail: function(oEvent) {
 var oLocalContext = oEvent.getSource().getBindingContext("localData"); // undefined
 var oLocalContext = this.byId("zgutMailFormText").getBindingContext("localData"); // undefined too 
},
<TextArea id="zgutMailFormText" value="{localData>/Text}">
  <layoutData>
    <l:GridData span="XL2 L3 M3 S8" />
  </layoutData>
</TextArea>

标签: sapui5sap-fiori

解决方案


如何获取上下文取决于您的应用程序代码,我在您的问题中看不到太多。但是由于localData模型是客户端模型,并且由于绑定路径是已知的(绝对路径),您可以简单地使用方法createBindingContext创建上下文。

onSendMail: function(oEvent) {
  const oLocalContext = this.getView().getModel("localData").createBindingContext("/");
  // ...
},

控件不返回上下文的原因可能有很多:

  • 该控件根本没有上下文。框架自动创建上下文以解析相对绑定路径。由于您TextArea使用绝对路径 ( localData>/Text) 绑定数据,因此无需创建上下文。路径可以立即解决。
  • 您访问的控件(例如this.byId("zgutMailFormText"))是模板控件的一部分。模板不包含任何上下文。只有渲染的克隆可以。有关更多说明,请参阅此答案
  • 父控件本身没有绑定上下文,因此没有要传播的上下文。

API 参考sap/ui/model/Context

Context是指向模型数据中对象的指针。相对绑定需要上下文作为参考点才能解析其路径;没有上下文,相对绑定将无法解析并且不指向模型数据。例如,可以通过以下方式创建上下文实例:


推荐阅读