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

How to get binding context of the second model?

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

第二个模型的数据显示在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>

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

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

控件 returns 没有上下文的原因可能有很多:

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

来自API reference: sap/ui/model/Context:

The Context is a pointer to an object in the model data. A relative binding needs a context as a reference point in order to resolve its path; without a context, a relative binding is unresolved and does not point to model data. Context instances can, for example, be created in the following ways: