Sapui5 在列出子项的视图中显示选定父项的名称

Sapui5 在列出子项的视图中显示选定父项的名称,sapui5,Sapui5,我在JSON模型中有一个父-子关系。我有一个使用ObjectList列出父母的视图。此列表中某项的按下事件将导航到另一个视图,其中类似的ObjectList显示选定父项的子项 我希望能够使显示子对象的视图的标题包含父对象的属性。例如,如果模型为: { "parents": [ { "name": "Spartacus","children": [{"name": "Spartacus Jnr"}, {"name": "Little Spartacus"}]

我在JSON模型中有一个父-子关系。我有一个使用ObjectList列出父母的视图。此列表中某项的按下事件将导航到另一个视图,其中类似的ObjectList显示选定父项的子项

我希望能够使显示子对象的视图的标题包含父对象的属性。例如,如果模型为:

{
    "parents": [
        {
        "name": "Spartacus","children": [{"name": "Spartacus Jnr"}, {"name": "Little Spartacus"}]
        }, 
        {"name": "Rasputin", "children": [{"name": "Grigori"}, {"name": "Yefimovich"}]
        }, 
        {"name": "Sting", "children": [{"name": "Josepth"}, {"name": "Fuchsia"}]}
            ]
}
然后,如果我选择父对象“Spartacus”,则显示子对象的视图应具有标题“Spartacus的子对象”

要点:由于各种原因,我将子视图绑定到子数组。如果我将子视图绑定到父视图,并将ObjectList路径设置为/children,那么这将解决我的问题。我还可以获取视图的objectContext的路径,并将其切碎,然后以这种方式检索父值——但这感觉很笨拙,而且我使用XML视图声明。总的来说,我很固执和好奇,想知道使用相对路径的向上遍历

我尝试过使用双点的相对路径方法,例如xpath:

headerText="Children of {../name}"

但这是行不通的。我在UI5中找到了很多关于绑定的解释,但是没有任何内容讨论如何按照这里的要求遍历模型。有人能提供解决方案或指向提供解决方案的文档的链接吗?

如果这是OData,您可以在子对象中有一个指向父对象的链接,并通过该链接引用它,但据我所知,对于JSONModel,没有像这样的向上关系

你在这里真的回答了你自己的问题。您要做的是将视图绑定到父视图,并使用相对路径引用子视图。我不认为这是矮胖的。缺点是什么?您仍将在模型中加载相同的数据,并且它仍以逻辑方式组织


事实上,在加载上面提到的oDataModel时,如果稍微偏离一点,则会向模型中添加重复的值,而在视图绑定方式可能不同的情况下,没有明显的优势。

默认的JSONBinding实现不支持路径遍历。但是,通过在需要的地方设置不同的绑定上下文,可以轻松解决您的问题。我创建了一个模拟这个的程序。包含子项的列表的项聚合直接绑定到子项数组:

let path = "/parents/0";
let childrenTable = this.byId("children");
childrenTable.bindAggregation("items", {
    "path" : path + "/children",
    "template" : new StandardListItem({ "title" : "{name}"})
});
为了显示父对象的名称,我在列表中添加了一个工具栏,并将其绑定到模型中相应的父对象

childrenTable.getAggregation("headerToolbar").bindElement(path);

我自己的解决方法是设法在控制器中为子视图获取父名称,然后使用

var list = this.byId("ChldrenList")
list.setHeaderText('Children for ' + mdlParent.name)  
// where mdlParent.name is my arbitrary model and attribute to be displayed.

我仍然对此不满意,因为它削弱了声明性XML视图方法的威力。但是我的老板说要接受它,继续8-

谢谢-这个问题是为了在JSON模型中提供向上遍历的需要而设计的。需要注意的一点是,我正在使用一个列表控件,AFAIK有一个绑定机会,我使用它绑定到模型的子数组。但是我不能将LIst.headerText绑定到其他东西-这就是向上遍历要求的原因。这也是为什么Matbtt在他的回答中使用了一个单独的文本字段作为标题。谢谢你的想法。好的,谢谢你的另一个有用的技巧。我有点惊讶UI5没有提供更简单的方法,因为这必须是一种常见的模式。此外,它在某种程度上削弱了声明性XML视图方法的功能。我将设置视图的绑定上下文,将子视图显示给父视图,而不是子数组。我不知道其他框架是否支持这一点,但UI5足够灵活,可以插入您自己的绑定语法;