sapui5 - 如何获取第二个模型的绑定上下文?
问题描述
我的 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>
解决方案
如何获取上下文取决于您的应用程序代码,我在您的问题中看不到太多。但是由于localData
模型是客户端模型,并且由于绑定路径是已知的(绝对路径),您可以简单地使用方法createBindingContext
创建上下文。
onSendMail: function(oEvent) {
const oLocalContext = this.getView().getModel("localData").createBindingContext("/");
// ...
},
控件不返回上下文的原因可能有很多:
- 该控件根本没有上下文。框架自动创建上下文以解析相对绑定路径。由于您
TextArea
使用绝对路径 (localData>/Text
) 绑定数据,因此无需创建上下文。路径可以立即解决。 - 您访问的控件(例如
this.byId("zgutMailFormText")
)是模板控件的一部分。模板不包含任何上下文。只有渲染的克隆可以。有关更多说明,请参阅此答案。 - 父控件本身没有绑定上下文,因此没有要传播的上下文。
Context
是指向模型数据中对象的指针。相对绑定需要上下文作为参考点才能解析其路径;没有上下文,相对绑定将无法解析并且不指向模型数据。例如,可以通过以下方式创建上下文实例:
- 对于
sap.ui.model.ListBinding
每个列表条目,- 作为与 a 关联的单个上下文
sap.ui.model.ContextBinding
,- 通过调用
sap.ui.model.Model#createBindingContext
.
推荐阅读
- installshield - InstallShield 2016 Pro,服务不会安装多个功能
- machine-learning - 我应该在最后一个卷积层中使用 conv 3x3 进行语义分割吗?
- javascript - 文本字段使用 react-select 自动建议用户名
- node.js - 在 Nodejs 中找不到模块
- google-apps-marketplace - 限制服务帐号的 G Suite 域范围委派
- javascript - JavaScript 使用递归添加两个链表值
- jquery - 我正在尝试使用 jQuery 更改背景图像,它可以在我的本地机器上运行,但不能用于在线服务
- c++ - 分隔整个部分和小数部分的代码
- performance - 为给定文件中的每一行生成 shasum 时的性能问题
- javascript - 通过选择选项过滤表格行