2016-01-07 12 views
5

SapUI5'te bir XML görünümünde bir JSONModel'den bir flag (koşul) kullanan bir if/else koşulunu nasıl uygularım?Bir sapUI XML görünümünde if/else koşulu nasıl kullanılır?

sap.ui.define([ 
    "sap/ui/core/mvc/Controller", 
    "sap/ui/model/json/JSONModel" 
], function (Controller, JSONModel) { 
    "use strict"; 

    return Controller.extend("sap.ui.demo.myApp.myController", { 
     onInit: function() { 
      //// set data model on view 
      var oData = { 
       title: "A cool title", 
       values: [{name: "Text 1", marketed: true}, {name: "Text 2", marketed: false}, {name: "Text 3", , marketed: true}] 
      }; 
      var oModel = new JSONModel(oData); 
      this.getView().setModel(oModel); 
     } 
    }); 
}); 

ve Görünüm:

<mvc:View 
     controllerName="sap.ui.demo.myApp.myController" 
     xmlns="sap.m" 
> 
    <!-- using aggregation binding --> 
    <Panel expandable="true" expanded="true" headerText="{/title}" width="100%" content="{/values}"> 
     <content> 
      <Label text="{name}"/> 
      <!-- if {marketed} 
        <Label text="product is marketed"/> 
       else 
        add nothing 
      --> 
     </content> 
    </Panel> 

</mvc:View> 

Edit:

daha bunu yapmak için daha iyi bir yolu var mı

Şimdiye kadar bir Kontrolörü var overkill duygu XML-Preprocessor uygulayarak ?

cevap

5

OpenUI5 sen emin değilim bu

<template:if test="{marketed}"> 
    <template:then> 
     <Label text="product is marketed" /> 
    </template:then> 
    <template:else> 
     <Image src="path.jpg" /> 
    </template:else> 
</template:if> 

gibi şeyler yapabilirÖn İşleme Talimatları ile Preprocessing Instructions ve Expression Binding

destekliyorsa null/not null için ilk satırı testlerinde test veya true/false. Bağlama İfade kullanışlı nerede olabileceğini

budur: Bu Düzen

aşağıdaki çözüm daha basit olabilir süslü parantez

<template:if test="{= ${marketed} === true}"> 

içinde karmaşık ifadeler için izin verir, ama biraz rahatsız görünüyor.

Her iki öğeyi de XML görünümünüze yerleştirin, ancak görünürlüğü karmaşık ifade bağlama ile değiştirin.

<Label text="product is marketed" visible="{= ${marketed} === true}"/> 
<Image src="path.jpg" visible="{= ${marketed} === false}"/> 
+0

Afaik Preprocession Talimatları metriğini kullanmak için bir XML-Preprocessor uygulamak zorundayım. Bunu bu bağlamda nasıl yapabilirim? Ayrıca, bahsettiğiniz 'template' ad alanı nedir? Önişlemci çıkışı? – Benvorth

+0

https://openui5.hana.ondemand.com/1.28.19/docs/guide/5ee619fc1370463ea674ee04b65ed83b.html 'Şablon' ad alanı, 'xmlns: template = "http://schemas.sap.com/sapui5/ olarak tanımlanmıştır. uzama/sap.ui.core.template/1" '. Bağlantı ayrıca küçük bir örnek içerir – Marc

+0

Bu bağlantı, bir XML-Önişlemci uygulamasının çalışan bir örneğini sağlamaz ve kodumda çalışmasını sağlayamıyorum. Elinizde çalışan bir örnek var mı? – Benvorth

3

ben senin gereksinimi var emin değilim, ama bu sadece yapacağını pazarlanan-bayrak görünür özelliğini bağlama gibi görünüyor. Eğer ben senin soru propery anlaşılan ettiyseniz

visible="{= !${/marketed}}" 
+0

haha, çok ... özgür ruhlu! Bunu beğendim :-) Ne yazık ki bu manzarayı daha karmaşık bir şekilde kontrol etmesine izin vermez. – Benvorth

3

gibi bağlayıcı ifade kullanabilirsiniz bir reddedildiği yol içinde bağlamak gerekirse

, bir biçimlendirici işlevini kullanabilirsiniz. Bu örnekte

<Label text="{ 
    path: 'marketed' 
    formatter: '.formatter.marketed' 
}"/> 

.formatter.marketed

ayrı biçimlendirici bir işlev başvurur.Örnekte

https://sapui5.hana.ondemand.com/sdk#docs/guide/0f8626ed7b7542ffaa44601828db20de.html

bu, biz boş dönen sadece bir etiket olduğu gibi: js dosyası: hpow doğru biçimlendirici fonksiyonunu kurmak için

marketed: function(marketed) { 
    if(marketed) { 
     return 'product is marketed'; 
    } else { 
     return ''; 
    } 
} 

ui5 SDK bakın string, bu yüzden sadece boş olacak. Etiket hala oluşturulacak, ancak boş bir dizedir, bu yüzden gösterilecek bir şey yoktur, bu nedenle kullanıcı orada olduğunu asla bilmeyecektir. Tamamen emin değilim, ancak boş bir dize yerine undefined döndürürseniz, etiket hiç oluşturulmayabilir.

İlgili konular