Javascript 如何在SAPUI5的Xml视图中编写无限行中继器

Javascript 如何在SAPUI5的Xml视图中编写无限行中继器,javascript,xml,sapui5,Javascript,Xml,Sapui5,我试图在SAPUI5中显示复杂的json数据 以下是我的复杂数据: results:{ "name" : "sample", "child" : [ "name" : "sample", "child" : [ "name" : "sample", "child" : [

我试图在SAPUI5中显示复杂的json数据

以下是我的复杂数据:

results:{
         "name" : "sample",
         "child" : [
                    "name" : "sample",
                    "child" : [
                        "name" : "sample",
                        "child" : [
                                    "name" : "sample",
                                    "child" : [

                                     ]
                                  ]
                     ]
                 ]
        }
在这里,内在的孩子是无限的。这取决于我的数据

所以我的问题是如何在xml视图中显示这种类型的数据

之前,我使用行中继器显示这种类型的数据。在那里,数据只有3个级别。但现在它有无限的空间。那么,如何使用行中继器来显示这种类型的数据呢

这是一个我的3级行中继器

<c:RowRepeater rows="{path: bindingpath}" id="rowRepeater" >
      <c:RowRepeater rows="{path: bindingpath/somePath}" >
            <c:RowRepeater rows="{path: bindingpath/somePath/anotherpath}">

            </c:RowRepeater>
      </c:RowRepeater>
</c:RowRepeater>

这是一个非常有趣的问题,但我认为rowRepeater不会帮你解决这个问题

如果要绑定rowRepeater控件的row属性,应传递一个数组,其中数组中的每个位置都将是输出中的一行

在结果对象中,只有一个“根节点”。如果有两个或多个节点,rowRepeater将渲染输出。此外,绑定路径只能保存一个值,因此如果您考虑动态更改它,它将不会适用于模型中的所有级别的数据

请参见下面的示例:


JS-Bin
//创建行中继器控件
var oRowRepeater=新的sap.ui.commons.RowRepeater(“rr1”);
setNoData(新的sap.ui.commons.TextView({text:“对不起,没有可用数据!”}));
//var dataObject={data:[“a”,“b”]};
var dataObject={data:[
{名称:“A”,
儿童:[
{名称:“A1”,
儿童:[
{名称:“A1a”}
]
},
{名称:“A2”}
]
},
{name:“B”}//尝试删除这一行……由于将有一个位置,因此不会呈现rowRepeater
]};
//创建JSON模型
var oModel=new sap.ui.model.json.JSONModel(数据对象);
sap.ui.getCore().setModel(oModel);
//创建标题
var oTitle=new sap.ui.core.Title({text:“Letters”});
oRowRepeater.setTitle(oTitle);
//配置RowRepeater
oRowRepeater.setDesign(“标准”);
//oRowRepeater.setNumberOfRows(5);
//oRowRepeater.setCurrentPage(1);
oRowRepeater.setTitle(oTitle);
var oRowTemplate=new sap.ui.commons.TextView({
文本:“{name}”,
});
oRowRepeater.bindRows(“/data”,oRowTemplate);
oRowRepeater.placeAt(“内容物”);

我将创建一个自定义控件(可能基于自定义
FlexBox
布局的
RowRepeater
Panel
),在其中绑定最高级别的聚合


然后,自定义控件应检查类型为
Array
的特定节点,如果它有1个或多个项,则从该路径递归地呈现子元素,以此类推。

感谢您的回复。我尝试在我的场景中使用TreeTable。但是我不能得到我所期望的。在这里,我试图以树级结构显示注释和回复。这样做有什么想法吗?RowRepeater不是为树级结构设计的。如果您想使用rowRepeater,您有两个选项:1)解析数据,使其成为一个简单数组,其中多个项处于同一级别(并且您不再有树);2)为json上的每个“子”元素动态创建一个rowRepeater,并动态调整ID和数据绑定。记住,如果你有一个人只有一个孩子。。。rowRepeater不会渲染。在我看来,这两种选择都非常糟糕。你所需要的应该通过一个树或树表控件来实现。我正在尝试以Hiriacal格式显示评论和回复。有可能用树或表树来做……是吗。?好吧,那我试着给你回电话。谢谢你的帮助。请看一下。