2017-01-04 25 views
0

詳細という名前のモデルに次のJSONデータがあります。私はキーを持っているオブジェクトだけを望む:私のテーブルの "月"プロパティ。jsonオブジェクトのプロパティを解析してコントロールにバインドする方法

createContent : function(oController) { 
return new sap.m.Table({ 
    columns: [ 
       new sap.m.Column({ 
       header: new sap.m.Text({ 
        text: 'value', 
       }) 
      }), 
    items: { 
      path: '/details', 
      filters: [ new sap.ui.model.Filter("key","EQ","month") ], //only display months 
      template: new sap.m.ColumnListItem({ 
       cells: [ 
         new sap.m.Text({ 
         text: '{value}', 
        }), 

はUIに今、次のようにこのために制御

oData 
    details: 
    Array[4] 
    0:Object 
    1:Object 
    2:Object 
    editable:false 
    key:"year" 
    removeable:false 
    value:"2000" 
    3:Object 
    editable:false 
    key:"event" 
    removeable:false 
    value:"Day: TRUE, Night:False" 
    4:Object 
    editable:false 
    key:"month" 
    removeable:false 
    value:"Time: August, Valid:True,from 2016" 

制御におけるフィルタ特性は、私が

  Time: August, Valid:True,from 2016 

私がしたいを表示する列を1つだけ持っていますさ2列に値を表示します。 「{value.time}」または「{value.valid}」というテキストを含むアイテムを作成できません。

答えて

1

データ"Time: August, Valid:True,from 2016"は文字列です。その内容は有効なjsonではありません。

しかし、あなたは、文字列の必要な部分を抽出するためにフォーマッタを使用することができます。

createContent : function(oController) { 
return new sap.m.Table({ 
    columns: [ 
       new sap.m.Column({ 
       header: new sap.m.Text({ 
        text: 'Time', 
       }) 
      }), 
       new sap.m.Column({ 
       header: new sap.m.Text({ 
        text: 'Valid', 
       }) 
      }), 
    items: { 
      path: '/details', 
      filters: [ new sap.ui.model.Filter("key","EQ","month") ], //only display months 
      template: new sap.m.ColumnListItem({ 
       cells: [ 
         new sap.m.Text({ 
         text: {path: "value", formatter: oController.extractTimeFromValue}, 
        }), 
         new sap.m.Text({ 
         text: {path: "value", formatter: oController.extractValidFromValue}, 
        }), 

このようなあなたのコントローラ内でフォーマッタ機能を追加します。

extractTimeFromValue:function(value){ 
    var match = value.match(/Time:\s*(\w+)/); 
    if (match){ 
    return match[1]; //return the first group (\w+) 
    } 
    return null; 
}, 
extractValidFromValue:function(value){ 
    var match = value.match(/Valid:\s*(\w+)/); 
    if (match){ 
    return match[1]; //return the first group (\w+) 
    } 
    return null; 
} 
+0

フォーマッタは、値全体 – learningUser

+0

'を返します。 8月*と一致する[1] 'は* 8月* – schnoedel

+0

フォーマッタ関数が機能しません。 '{value> time}'、 – learningUser