2016-06-23 10 views
1

Ich habe diese XML-Liste bekommt:SAPUI5: Databinding zur Liste

<List id="myList" 
      items="{/Items}"> 
      <items> 
       <ObjectListItem title="{ID}" type="Active" press="onListItemPressed" 
          number="{ parts:[{path:'Price'},{path:'Currency'}], 
          type: 'sap.ui.model.type.Currency', formatOptions: {showMeasure: false} }" 
        numberUnit="{Currency}"> 
        <firstStatus> 
         <ObjectStatus 
          text="{path:'End', 
          formatter: '.formatter.getCountdown'}" 
          state="{path:'End', formatter: 
          '.formatter.getCountdownStatus'}" /> 
        </firstStatus> 
        <attributes> 
         <ObjectAttribute text="{i18n>GlobalType}: {Format}" /> 
        </attributes> 
       </ObjectListItem> 
      </items> 
     </List> 

Im Moment i bindet die Daten mit JS:

var objectTemplate = new sap.m.ObjectListItem({ 
       title : "{ID}", 
       number : "{ parts:[{path:'Price'},{path:'Currency'}], type: 'sap.ui.model.type.Currency', formatOptions: {showMeasure: false} }", 
       numberUnit :"{Currency}", 
       type : sap.m.ListType.Active, 
       press : this.onListItemPressed, 

       attributes : [new sap.m.ObjectAttribute({ 
          text : "{i18n>GlobalType}: {Format}" 
        })], 
       firstStatus : new sap.m.ObjectStatus({ 
              text : "{path:'End'}", 
              status : "{path:'End'}" 
       }) 
      }); 


oList.bindAggregation("items", { 
       path : "/Items", 
       filters: [ new sap.ui.model.Filter("Type", sap.ui.model.FilterOperator.EQ, oArgs.TypeID) ], 
       template : objectTemplate 
     }); 

Ich mag die XML-Liste verwenden, statt Erstellen der Liste von JS. Kann ich bindAggregation mit einer XML-Vorlage verwenden?

Antwort

0

Sie tun es in der ersten XML-Ansicht Beispiel richtig (Sie müssen die items-Eigenschaft binden, die in diesem Beispiel getan wird). In diesem Fall müssen Sie jedoch den Knoten <items> aus der XML-Ansicht entfernen, da Sie eine Vorlagenfactory verwenden möchten, anstatt die Elemente manuell zu definieren.

<List id="myList" 
     items="{/Items}"> 
      <ObjectListItem title="{ID}" type="Active" press="onListItemPressed" 
         number="{ parts:[{path:'Price'},{path:'Currency'}], 
         type: 'sap.ui.model.type.Currency', formatOptions: {showMeasure: false} }" 
       numberUnit="{Currency}"> 
       <firstStatus> 
        <ObjectStatus 
         text="{path:'End', 
         formatter: '.formatter.getCountdown'}" 
         state="{path:'End', formatter: 
         '.formatter.getCountdownStatus'}" /> 
       </firstStatus> 
       <attributes> 
        <ObjectAttribute text="{i18n>GlobalType}: {Format}" /> 
       </attributes> 
      </ObjectListItem> 
    </List> 
+0

Aber was muss ich in der Steuerung anstelle von 'template: objectTemplate' tun? Kann ich stattdessen die "myList" Struktur bekommen? Ich weiß nicht, 'bindAggregation' mit einer XML-Ansicht zu verwenden – alexP

+0

AFAIK es wird nicht unterstützt/empfohlen, diese beiden Techniken zu mischen; Sie können jedoch versuchen, den Teil 'template: objectTemplate' des JS-Codes zu entfernen und den Knoten 'items = "{/ Items}" 'binding und' 'aus dem XML-Code zu entfernen. Warum willst du diese Dinge mischen? Wenn Sie Filter in einer XML-Ansicht anwenden möchten, überprüfen Sie dies [Beispiel] (http://help.sap.com/saphelp_scm700_ehp03/helpdata/en/09/9f0a2851ad4118af36345f7dd13ea8/content.htm) – nistv4n

+0

Ich möchte XML für alle Ansichten verwenden . Jetzt ist es eine Mischung. In der XML ist eine leere Liste ohne Attribute und in der Steuerung wird die Liste gefüllt. : -/ – alexP