能否在无模型名称的情况下实现Fragment数据绑定?
解决方案:让Fragment控件无需指定模型名即可绑定数据
这个问题的核心原因是:你给SimpleForm执行元素绑定时,使用的是命名模型"Customers",但该控件的默认模型并没有切换为这个命名模型,所以子控件的绑定如果不指定模型名,会默认去读取视图的默认模型(而非"Customers")的数据,自然无法展示。
下面是几种可行的解决办法:
方法1:将命名模型设为Fragment根控件的默认模型
在执行元素绑定前,先把"Customers"模型设置为cpForm的默认模型,这样所有子控件会自动继承这个默认模型,绑定就无需指定模型名了:
// 获取Customers模型 const oCustomersModel = this.getView().getModel("Customers"); // 将其设为SimpleForm的默认模型(不指定模型名参数即为默认) this.cpForm.setModel(oCustomersModel); // 执行元素绑定,此时无需指定model参数 this.cpForm.bindElement({ path: sPath });
之后Fragment里的控件就可以直接写:
<Text xmlns="sap.m" text="{firstName}"/>
方法2:在Fragment根控件上直接设置默认模型(XML方式)
如果不想在控制器里写代码,也可以在Fragment的根SimpleForm上通过model属性设置默认模型(这里的model属性用于指定该控件的默认模型):
<SimpleForm xmlns="sap.ui.layout" model="Customers"> <!-- 子控件直接绑定,无需指定模型名 --> <Text text="{firstName}"/> </SimpleForm>
这种方式下,控制器里的bindElement代码可以保持不变,子控件会自动使用根控件的默认模型进行绑定。
额外说明
UI5的绑定规则是:当控件绑定不指定模型名时,会向上查找父控件/视图的默认模型(未命名的模型)。你之前的代码只是给SimpleForm设置了基于命名模型的元素绑定,但没有改变它的默认模型,所以子控件还是会去查找视图的默认模型,导致必须显式指定Customers>才能访问数据。
内容的提问来源于stack exchange,提问作者xxHBxx
相关产品推荐
相关产品推荐

