Sapui5 聚合绑定到子集合

Sapui5 聚合绑定到子集合,sapui5,Sapui5,在XML视图中,我将JSON模型绑定到名为“foo”的页面。模型的对象有一个“name”字段和子集合“bar”(有一个“code”字段),我想在列表中显示。这是这样建模的: JS代码 var foo = { name:'My Name', bar:[{ code:'Code 1' }, { code:'Code 2' }] } var fooModel = new sap.ui.model.JSONModel(foo); page.setModel(fooModel, 'foo'); page.

在XML视图中,我将JSON模型绑定到名为“foo”的页面。模型的对象有一个“name”字段和子集合“bar”(有一个“code”字段),我想在列表中显示。这是这样建模的:

JS代码

var foo = { name:'My Name', bar:[{ code:'Code 1' }, { code:'Code 2' }] }
var fooModel = new sap.ui.model.JSONModel(foo);
page.setModel(fooModel, 'foo');
page.bindElement('foo>/');
XML标记

<Label text='{foo>name}'/>
<List items='{foo>bar}'>
    <StandardListItem title='{foo>code}'/>
</List>

请注意,子“bar”数组的列表项值是通过名称“foo”解析的。至少这对我来说是有效的,我还没有找到其他方法在列表中引用它们

但问题是如何在列表项中也获取顶级“foo”对象数据?假设我想在列表项中也显示“name”字段? 换句话说,是否有一种方法可以执行以下等效操作,即我可以使用不同的名称引用子集合?有没有办法做到这一点

<List items="{ path:'foo>bar', name='bar' }">
    <StandardListItem title='{bar>code}' info='{foo>name}' />
</List>

您需要使用绝对路径来绑定
名称
属性。绝对是指模型中属性的完整路径。相反的是相对绑定路径。在这里,您只需在模型中的某个位置使用一个属性,并设置一个绑定上下文来告诉运行时您的属性在模型中的位置。您可以通过以下方式执行此操作:

page.bindElement("foo>/");
现在,运行时将此信息应用于此页面中针对模型
foo
的所有相关绑定。因此,您可以编写
foo>bar
,运行时会自动查找
foo>/bar
。但是,在项聚合中,这不起作用,因为
对象没有属性
名称
。因此,需要使用绝对绑定路径来绑定属性

<List items="{foo>bar}">
    <StandardListItem title='{foo>code}' info='{foo>/name}' />
</List>


您可以在中找到JSONModel绑定语法的解释

谢谢你的回复。对我有效的是信息“{foo>/name}”,所以绝对路径技术有效。(我用一个#bindElement更正编辑了我的第一篇文章,这很可能解释了你的答案和对我有效的答案之间的微小差异。)但这不起作用的是当我在一个列表中有一个列表时。也就是说,假设有一个“foo”对象数组,每个对象都有“bar”数组。如果我将顶部列表绑定为“items='{foo>/}',将“bar”内部列表绑定为“items='{foo>bar'}”,那么我就无法引用父对象(并且我已经尝试了您给出的答案的各种排列)。如果不清楚,我将编辑我的原始帖子以包含第二个示例。您确定使用的是page.bindElement(“foo>/”)。应该是“foo>/foo”来指向模型中的对象foo。我想我看到了你的困惑。在我的帖子中,我说JSON对象是foo:{stuff}。我只是用一个名字来引用我的对象,而不是“foo:”文本本身就在对象内部。我将编辑我的帖子来澄清这一点。