2016-01-07 5 views
5

मैं एसएसयूआई 5 में एक्सएमएल-व्यू में एक if/else स्थिति को कैसे लागू कर सकता हूं जो JSONModel से ध्वज (स्थिति) का उपयोग करता है?एक एसएपीयूआई एक्सएमएल-व्यू में 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> 

संपादित:

अब तक मैं एक नियंत्रक है

वहाँ से यह करने के लिए एक बेहतर तरीका है एक ओवरकिल-महसूस एक्सएमएल-प्रीप्रोसेसर को लागू करके ?

उत्तर

5

OpenUI5 Preprocessing Instructions और Expression Binding

का समर्थन करता है के साथ Preprocessing निर्देश आप इस

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

की तरह सामान कर सकते हैं मुझे यकीन है कि नहीं कर रहा हूँ अगर null/not null के लिए पहली पंक्ति परीक्षण में test या true/false

यह वह जगह है जहां अभिव्यक्ति बाइंडिंग काम हो सकता है: यह संपादित

निम्नलिखित समाधान अधिक सरल हो सकता है कर्ली कोष्ठक

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

भीतर जटिल भाव के लिए अनुमति देता है, लेकिन थोड़ा हैकी लगता है।

अपने एक्सएमएल व्यू में दोनों तत्वों को एम्बेड करें, लेकिन जटिल अभिव्यक्ति बाध्यकारी के साथ दृश्यता टॉगल करें।

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

अफैइक मुझे आपके द्वारा मेट्रियन प्रीप्रोसेशन निर्देशों का उपयोग करने के लिए एक एक्सएमएल-प्रीप्रोसेसर लागू करना है। मैं इस संदर्भ में यह कैसे कर सकता हूं? साथ ही, आपके द्वारा उल्लेख किए गए 'टेम्पलेट' नामस्थान का क्या अर्थ है? प्रीप्रोसेसर आउटपुट? – Benvorth

+0

https://openui5.hana.ondemand.com/1.28.19/docs/guide/5ee619fc1370463ea674ee04b65ed83b.html 'टेम्पलेट' नामस्थान को 'xmlns: template = "http://schemas.sap.com/sapui5/ के रूप में परिभाषित किया गया है विस्तार/sap.ui.core.template/1 "'। लिंक में एक छोटा उदाहरण भी है – Marc

+0

यह लिंक एक्सएमएल-प्रीप्रोसेसर कार्यान्वयन का एक चल रहा उदाहरण प्रदान नहीं करता है और मैं इसे अपने कोड में काम नहीं कर सकता। क्या आपके पास हाथ में एक चल रहा उदाहरण है? – Benvorth

3

मुझे यकीन नहीं है कि मुझे आपकी आवश्यकता है, लेकिन ऐसा लगता है कि मार्केट-फ्लैग में दिखाई देने वाली विशेषता को बाध्यकारी करना होगा।

आप एक नकार जिस तरह से आप की तरह

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

हाहा, बहुत ... मुफ्त उत्साहित! मुझे यह पसंद है :-) दुर्भाग्य से यह दृश्य को अधिक जटिल तरीके से नियंत्रित करने की अनुमति नहीं देता है। – Benvorth

3

बाध्यकारी मैं आपके सवाल का प्रॉपर्टी समझ में आ गया है अभिव्यक्ति का उपयोग कर सकते में बाध्य करने के लिए की जरूरत है, तो आप एक फ़ॉर्मेटर समारोह इस्तेमाल कर सकते हैं।

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

.formatter.marketed इस उदाहरण में एक अलग फ़ॉर्मेटर में एक समारोह संदर्भ देता है।js फ़ाइल:,

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

अपने उदाहरण में के रूप में यह सिर्फ एक लेबल, हम एक खाली लौट रहे हैं है:

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

hpow अप फ़ॉर्मेटर समारोह सही ढंग से स्थापित करने के लिए के लिए ui5 एसडीके देखें स्ट्रिंग, तो यह सिर्फ खाली हो जाएगा। लेबल अभी भी प्रस्तुत किया जाएगा, लेकिन यह एक खाली स्ट्रिंग है, इसलिए दिखाने के लिए कुछ भी नहीं है, इसलिए उपयोगकर्ता कभी नहीं जानता कि यह वहां है। मुझे पूरी तरह से यकीन नहीं है, लेकिन यदि आप खाली स्ट्रिंग के बजाय undefined लौटाते हैं, तो लेबल बिल्कुल प्रस्तुत नहीं किया जा सकता है।

संबंधित मुद्दे