2016-01-07 16 views
5

JSONModelのフラグ(条件)を使用するSapUI5のXMLビューでif/else条件を実装するにはどうすればよいですか?sapUI XML-Viewでif/else条件を使用するにはどうすればよいですか?

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); 
     } 
    }); 
}); 

ビュー

<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> 

編集

よりも、それを行うには良い方法があり

は、これまでのところ私はコントローラーを持っていますオーバーキル感覚のXML-Preprocessorを実装することで?

答えて

5

OpenUI5はあなたが私はわからないこの

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

のようなものを行うことができます前処理命令とPreprocessing InstructionsExpression Binding

をサポートしている場合null/not nullのための最初のラインのテストでtesttrue/false

バインディング式は便利かもしれないところである:それは中括弧の中に複雑な表現が可能になります

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

編集

次のソリューションは、よりシンプルであるかもしれません、ちょっとハッキリしているようだ。

両方の要素をXMLビューに埋め込みますが、複雑な式バインディングを使用して可視性を切り替えます。

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

Afaik前処理命令を使用するにはXMLプリプロセッサを実装する必要があります。どのように私はこの文脈でこれを行うことができますか?また、あなたが言及する 'template'名前空間は何ですか?プリプロセッサ出力? – Benvorth

+0

https://openui5.hana.ondemand.com/1.28.19/docs/guide/5ee619fc1370463ea674ee04b65ed83b.html 'template'名前空間は' xmlns:template = "http://schemas.sap.com/sapui5/として定義されています。 extension/sap.ui.core.template/1 "'と入力します。リンクには小さな例が含まれています – Marc

+0

このリンクでは、XMLプリプロセッサ実装の実行例は提供されておらず、コード内で動作させることはできません。手元に実例がありますか? – Benvorth

3

あなたの要件を満たしているかどうかはわかりませんが、marketed-flagに表示される属性を単純にバインドするように見えます。

あなたは私はあなたの質問のproperyを理解してきた場合は、

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

笑、非常に...フリー・スピリット!私はそれが好きです:-)残念ながら、これはより複雑な方法でビューを制御することはできません。 – Benvorth

3

のようなバインディング式を使用することができ否定形でバインドする必要がある場合は、フォーマッタの機能を使用することができます。この例では

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

.formatter.marketedは別個フォーマッタ関数を参照します。JSファイル:

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

が正しくフォーマッタ機能を設定するにはhpowためUI5 SDKを参照してください:これは単なるラベルであるとして、あなたの例では

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

を、私たちは空を返しています文字列なので、空白になります。ラベルはレンダリングされますが、空の文字列なので表示するものはないので、ユーザーはそのラベルが表示されることはありません。私は完全にはわかりませんが、空の文字列ではなくundefinedを返すと、ラベルがまったく表示されないことがあります。

関連する問題