2

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

这是我的 oData 模型的示例:

  1. /EmployeeSet - 返回两个实体:
    • Pernr = '00000001'
    • Pernr = '00000002'
  2. /EmployeeSet('00000001') - 返回一个实体:
    • Pernr ='00000001' 名称 ='Jacob'
  3. /EmployeeSet('00000002') - 返回一个实体:
    • Pernr ='00000002' 名称 ='Matthew'
  4. /EmployeeSet('00000001')/KidsListSet - 返回两个实体:
    • PernrKid = '00000010' 姓名 = 'Sophia'
    • PernrKid = '00000011' 姓名 = '詹姆斯'。
  5. /EmployeeSet('00000002')/KidsListSet - 返回三个实体
    • PernrKid = '00000020' 名称 = '亚历山大'
    • PernrKid = '00000021' 名称 = 'Zoe'
    • PernrKid = '00000022' 姓名 = '奥利弗'

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>

handleAssigment 函数的代码:

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 会更新,我会看到两个或三个条目(基于第一个选择)

但是我有几个问题:

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

  2. 也许无需在视图控制器中创建新的选择项就可以进行数据绑定?

谢谢!

更新时间:2014 年 6 月 2 日

我如何设置 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);

...

五。

4

1 回答 1

1

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

或者,我不确定您将如何在视图中执行此操作,但您可以侦听控制器的 select1 绑定 onInit 并从 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);
于 2014-02-05T23:01:30.927 回答