SAP UI5 - Json数据绑定

上次尝试了UI5的View和controller,今天准备学习下UI5的数据绑定。

先尝试Json模式

首先在Controller.js中定义一个json数据源,并且绑定到数据Model上

代码如下:

 1     onInit: function() {
 2         var oModel = new sap.ui.model.json.JSONModel();
 3         var data = {
 4                 firstName: "John",
 5                 lastName: "Doe",
 6                 birthday: {day:01,month:05,year:1982},
 7                 address:[{city:"Heidelberg"}],
 8                 enabled: true
 9             };
10         oModel.setData(data);
11         sap.ui.getCore().setModel(oModel);
12     },

运行时内存中应该就会有这个数据模型了,下一步是在View中使用这些数据

 首先为了美观,这次的View中添加了一个Form,form中有若干field,包含结构如下:

先简写如下:

sap.ui.layout.form.Form->Form

sap.ui.layout.form.FormContainer->FormContainer

sap.ui.layout.form.FormElement->FormElement

sap.ui.commons.TextField->TextField

Form

 FormContainer1

   FormElement1

     TextField1

     TextField2

     TextField3  

   FormElement2   '

     ....  

 FormContainer2

   .......

现在Form构建好了,View.js中createContent方法的代码如下:

 1     createContent : function(oController) {
 2         
 3         var oTextField1 = new sap.ui.commons.TextField("T1", 
 4                 {
 5                 value: "{/firstName}"
 6                 });
 7         var oTextField2 = new sap.ui.commons.TextField("T2", 
 8                 {
 9                 value: "{/lastName}"
10                 });
11         var oTextField3 = new sap.ui.commons.TextField("T3", 
12                 {
13                 value: "{/birthday/year}"
14                 });
15         var oTextField4 = new sap.ui.commons.TextField("T4", 
16                 {
17                 value: "{/address}"
18                 });
19         
20         var oFormContainer = new sap.ui.layout.form.FormContainer("F1C1",
21                 {
22                 title: "Personnel data",
23                 formElements: [
24                                new sap.ui.layout.form.FormElement(
25                                     {
26                                     label: new sap.ui.commons.Label(
27                                            {text:"Name",   
28                                            }),
29                                     fields: [oTextField1,
30                                              oTextField2,
31                                              oTextField3,
32                                              oTextField4,]       
33                                        })],
34                 });
35                 
36     var oLayout = new sap.ui.layout.form.GridLayout();
37     
38     var oForm = new sap.ui.layout.form.Form("F1", 
39             {
40             title: "FORM",
41             layout: oLayout,
42             formContainers:[
43                             oFormContainer
44                             ]
45         
46             });    
47     return oForm;
48     }

在定义TextField时,通过两种方法可以绑定数据

第一种就是代码中的 value: "{/firstName}" 这样的,绑定的数据就是Json数据源中的firstName对应的值

第二种方法是通过oTextField.bindProprety('value','/firstName') 效果是一样的。

如果Json数据有多层格式,就按照/birthday/year的方式访问,相当于Jsondata[birthday][year].

 

 

如果Json数据是一个数组,有多条记录,并且想要绑定到一个Table中,可以采用如下方式:

View中Table的构建如下:

Table:

  Column1

    TextField:

      value: "{/firstName}"

  Column2

      value: "{/lastName}"

然后在绑定Model的时候

var oModel = new sap.ui.model.json.JSONModel();
oModel.setData(tableData);
oTable.setModel(oModel);
oTable.bindRows("/");

这样每一条记录都会被绑定到Table对应的一行,并且按照TextField绑定的column名字匹配

 

附上完整的Table绑定Json数据的代码:

 这边我把数据源一并写在了View.js中

 1 sap.ui.jsview("ui5_view.MyView", {
 2 
 3     getControllerName : function() {
 4         return "ui5_view.MyView";
 5     },
 6 
 7     createContent : function(oController) {
 8         var oColumn1 = new sap.ui.table.Column('C1',
 9             {
10             label:
11                 new sap.ui.commons.Label({
12                     text: "FirstName"
13                 }),
14             template:
15                 new sap.ui.commons.TextField().bindProperty("value","firstName"),                
16             });
17         
18         var oColumn2 = new sap.ui.table.Column('C2',
19             {
20             label: "LastName",
21             template:
22                 new sap.ui.commons.TextField().bindProperty("value","lastName"),                                    
23                 });        
24         
25         var oTable = new sap.ui.table.Table('TB1', 
26                 {            
27                 });
28         oTable.addColumn(oColumn1);
29         oTable.addColumn(oColumn2);
30         var oModel = new sap.ui.model.json.JSONModel();
31         var data = [
32                 {
33                 firstName: "John",
34                 lastName: "Doe",
35                 },
36                 
37                 {
38                 firstName: "Tom",
39                 lastName: "Jerry",    
40                 }];
41         
42         oModel.setData(data);
43         oTable.setModel(oModel);
44         oTable.bindRows("/");
45         return oTable;
46     }    
47     }
48     );

效果如下:

 

 

 

    

posted on 2015-04-13 14:54  刀疤2  阅读(1207)  评论(1编辑  收藏  举报

导航