2014-02-05 36 views
2

我想创建两个动态选择列表使用SAPUI5和XML作为开发范例的意见。UI5 oData和两个依赖选择

这里是比如我的OData模式:

  1. /EmployeeSet - 返回两个实体:
    • PERNR = '00000001'
    • PERNR = '00000002'
  2. /EmployeeSet('00000001') - 返回一个实体:
    • PERNR = '00000001' 名称='雅各
  3. /EmployeeSet( '00000002') - 返回一个实体:
    • PERNR = '00000002' 名称='马修
  4. /EmployeeSet( '00000001')/ KidsListSet - 返回两个实体:
    • PernrKid = '00000010' 名称= '索菲亚'
    • PernrKid ='00000011'Name ='James'。
  5. /EmployeeSet( '00000002')/ KidsListSet - 返回三个实体
    • PernrKid = '00000020' 名称= '亚历山大'
    • PernrKid = '00000021' 名称='佐伊
    • PernrKid = '00000022' 名称= '奥利弗'

选择一工作正常,默认值在那里,并点击行动,我可以看到两个值。

两种选择:

<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}" })); 
}, 

当我改变选择1值,选择2被更新,我看到两个或三个项目(基于第一选择)

但是我有几个问题:

  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); 

...

回答

1

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

另外,我不知道你会怎么做它在视图中,但你可以从选择1的绑定的第一行上的控制器和更新选择2中选择1的结合的OnInit听

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); 
+0

碧玉喜,oBinding是未定义的,看起来像我的视图绑定在控制器初始化期间不可用。有任何想法吗? – earny

+0

@earny尝试将模型向上移动,看看是否有帮助 –

+0

oModel在Component.js中定义,但我无法getBinding onInit。 – earny