2016-11-25 11 views
1

私は次のように私のデータを持っている:マッピング配列

{ 
    meta: { 
       format: "csv", 
       info: "desc", 
       columns: [ 
       { 
        id: "Name", 
        type: "Text", 
        length: 32   
       }, 
       { 
        id: "Text", 
        type: "Text", 
        length: 128 
       }] 
      }, 
    rows: [ 
       ["John","xxxx"], 
       ["Alpha","yyyy"], 
       ["Beta","wwww"], 
       ["Gamma","zzzz"]] 
} 

、私はColumnsRowsとしてsap.m.Tableコントロールにレコードをマップするために苦労しています。列はまっすぐ前方、まっすぐなマップのようですが、行は配列構造の配列です。オブジェクトの配列ではないこの構造体をバインドする方法はありますか?

+0

これはhttp://stackoverflow.com/questions/40793535/how-to-map-model-to-table-when-the-structure-is-array-basedの複製です。何が問題ですか?提供されるソリューションは十分ではありませんか? – matbtt

+0

@matbtt正確には重複していません。すでに完璧な答えを持っている質問を編集するのではなく、私はその質問のコメントでそれを行ったように、私の問題を正確に明確にすることを考えました。これは、JSソリューションよりも** SAPUI5/OPENUI5 **の指向の問題のほうが多いです。 – axiomtheorem

+0

完璧な答えが得られたら、それを受け入れるべきです。誰でもそれを見ることができ、回答者は評判を得る。 – matbtt

答えて

2

明らかに、プロパティ名の代わりに配列インデックスを使用すると、プロパティバインディングを作成することは可能です。

<List id="list" items="{/rows}> 
    <columns> 
     <Column> 
      <Label text="{/meta/columns/0/id}"/> 
     </Column> 
     <Column> 
      <Label text="{/meta/columns/1/id}"/> 
     </Column> 
    </columns> 
    <items> 
     <ColumnListItem> 
      <cells> 
       <Text text="{0}"/> 
       <Text text="{1}"/> 
      </cells> 
     </ColumnListItem> 
    </items> 
</List> 

動的にバインディングをコントローラで行うことができます。ユースケースに簡単に対応できるようにする必要があります。

var list = this.byId("list"); 

list.bindAggregation("columns", { 
    "path" : "/meta/columns", 
    "template" : new sap.m.Column({ 
     "header" : new sap.m.Label({ 
      "text" : "{name}" 
     }) 
    }) 
}); 

list.bindAggregation("items", { 
    "path" : "/rows", 
    "template" : new sap.m.ColumnListItem({ 
     "cells" : [ 
      new sap.m.Text({ "text" : "{0}" }), 
      new sap.m.Text({ "text" : "{1}" }) 
     ]}) 
}); 

リストにはバインディング情報を含めてはいけません。

<List id="list"/> 

バインディングプロセスをさらに制御する必要がある場合は、テンプレートの代わりにファクトリ関数を使用できます。

list.bindAggregation("columns", { 
    "path" : "/meta/columns", 
    "factory" : function(id, context) { 
     return new sap.m.Column({ 
      "header" : new sap.m.Label({ 
       "text" : "{name}" 
      }) 
     }); 
    } 
}); 
+0

返信いただきありがとうございますが、ここで取り組むことができない問題は、動的な列の数です。動的に列をバインドする方法はありますか? – axiomtheorem

+0

宣言的な方法ではありません。あなたがそれをコーディングする必要があるならば。 – matbtt

+0

正確です。私は、列を動的にバインドし、同じ列を参照するアイデアは得られていません。他の人が_formatter_について言及していますが、私はこのUI5フレームワークが初めてであり、それに続くリソースもあまりありません。私はui.Tableで同様の結果を達成することができましたが、私の第1の質問で解決策を使用しましたが、m.Tableは全く異なっています。 – axiomtheorem

関連する問題