Sapui5 UI5 oData和两个依赖选择

Sapui5 UI5 oData和两个依赖选择,sapui5,Sapui5,我试图使用SAPUI5和XML作为视图的开发范例来创建两个动态选择列表 以下是我的oData模型的示例: // create root view var oView = sap.ui.view({ id: "app", viewName: "view.App", type: "JS", viewData: { component : this } });

我试图使用SAPUI5和XML作为视图的开发范例来创建两个动态选择列表

以下是我的oData模型的示例:

 // create root view
        var oView = sap.ui.view({
            id: "app",
            viewName: "view.App",
            type: "JS",
            viewData: { component : this }
        });


        // Load oData Model
        var sServiceUrl = "/sap/opu/odata/sap/YKIDS/";
        var oModel = new sap.ui.model.odata.ODataModel(sServiceUrl, true, "", "");

        oView.setModel(oModel);
  • /EmployeeSet-返回两个实体:
    • Pernr='00000001'
    • Pernr='00000002'
  • /EmployeeSet('00000001')-返回一个实体:
    • Pernr='00000001'名称='Jacob'
  • /EmployeeSet('00000002')-返回一个实体:
    • Pernr='00000002'名称='Matthew'
  • /EmployeeSet('00000001')/kidslist-返回两个实体:
    • PernrKid='00000010'姓名='Sophia'
    • pernrchid='00000011'Name='James'
  • /EmployeeSet('00000002')/kidslist-返回三个实体
    • pernrchid='00000020'名称='Alexander'
    • pernrchid='00000021'名称='Zoe'
    • pernrchid='00000022'名称='Oliver'
  • Select1按预期工作,默认值在那里,单击操作我可以看到两个值

    两个选项:

    <Select id="select1" width="100%" items="{ path: '/EmployeeSet' } change="handleSelect1">
    <core:Item key="{Pernr}" text="{Name}" />
    </Select>
    
    <Select id="select2" width="100%" items="{ path: '/KidsListSet' }>
    <core:Item key="{PernrKid}" text="{Name}" />
    </Select>
    
    handleAssigments : function(evt){
      var context = evt.getParameter("selectedItem").getBindingContext();
      var Path = context.getPath() + '/KidsListSet';
      var select2 = this.getView().byId("select2");
    
    return select2.bindAggregation("items", Path, new sap.ui.core.Item({ key : "{PernrKid}", text : "{Name}" }));
    },
    
    当我更改select1中的值时,select2将被更新,我会看到两个或三个条目(基于第一个选择)

    不过,我有几个问题:

  • 如何预填充select2的默认值(例如PernrKid='00000010'Name='Sophia')

  • 也许不需要在视图控制器中创建新的选择项就可以进行数据绑定

  • 谢谢

    更新日期:2014年2月6日

    如何设置oData模型:

     // create root view
            var oView = sap.ui.view({
                id: "app",
                viewName: "view.App",
                type: "JS",
                viewData: { component : this }
            });
    
    
            // Load oData Model
            var sServiceUrl = "/sap/opu/odata/sap/YKIDS/";
            var oModel = new sap.ui.model.odata.ODataModel(sServiceUrl, true, "", "");
    
            oView.setModel(oModel);
    


    V.

    如果未选择占位符或空格,则在选择中显示占位符或空格不是更好吗?显示实际值可能会误导用户认为它们已设置好

    或者,我不确定您将如何在视图中执行此操作,但您可以在控制器的单元上侦听select1的绑定,并从select1的绑定的第一行更新select2

    onInit: function(){    
    var oSelect1 = this.getView().byId("select1");
    var oBinding = oSelect1.getBinding("items");
    
    var handler = function(oEvent) {
    
        //release the handler
        oBinding.detachDataReceived(handler);
    
        //get the first row of select1
        var aContexts = oEvent.oSource.getContexts();
        var row1 = aContexts[0];
    
        //get path to first rows kid list
        var Path = row1.getPath() + '/KidsListSet';
    
        //put values for first rows path into model either via select2 or the model
        eg  oModel.bindList(path)
        or select2.bindAggregation("items", Path ....
    
    };
    ... set up model
    var oModel = new ....
    
    //attach handler
    oBinding.attachDataReceived(handler);
    

    嗨,Jasper,oBinding未定义,看起来我的视图绑定在控制器初始化期间不可用。有什么想法吗?@earney尝试将模型向上移动,看看是否在Component.js中定义了helpsoModel,但我无法获取绑定onInit。绑定尚未在onInit中建立。视图已经创建(但尚未呈现,这意味着您此时无法在DOM中找到视图)。在这里找到更多关于控制器生命周期挂钩的信息:这也是我的想法@cschuff,在哪里可以访问视图控制器中的数据绑定?