【问题标题】:UI5 oData and two depended selectionUI5 oData 和两个依赖的选择
【发布时间】:2014-02-05 18:22:04
【问题描述】:

我正在尝试使用 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' 姓名 = 'James'。
  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);

...

V.

【问题讨论】:

    标签: sapui5


    【解决方案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);
    

    【讨论】:

    • 嗨 Jasper,oBinding 未定义,看起来我的视图绑定在控制器初始化期间不可用。有什么想法吗?
    • @earny 尝试将模型向上移动,看看是否有帮助
    • oModel 在 Component.js 中定义,但我无法 getBinding onInit。
    • 绑定尚未在 onInit 中建立。虽然已经创建了视图(但尚未渲染,这意味着此时您不会在 DOM 中找到您的视图)。在此处查找有关控制器生命周期挂钩的更多信息:openui5.hana.ondemand.com/#docs/guide/MVC.html
    • 这也是我的想法。 @cschuff,我可以在哪里访问视图控制器中的数据绑定?
    猜你喜欢
    • 2014-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多