2016-04-19 3 views
0

Ich muss mal auf die valueState Eigenschaft einer Liste zugreifen.Zugriff auf getValueState für alle Seitenelemente

Aus meiner Sicht werden die vier Zeiten, ein Satz für jeden Tag angezeigt. Die Informationen werden im Modell bereitgestellt.

var storeModel = new JSONModel({ 
    EffectiveDateFrom: this._selectedEffectiveDateFrom, 
    SiteInfo: oModelData, 
    SplitShifts: false, 
    OpeningTimes: [{ 
     BusinesDay: "Sunday", 
     startTime1: "08:00", 
     endTime1: "18:00", 
     startTime2: "", 
     endTime2: "", 
     isOpen: true, 
     tradingHours: "10:00", 
     overNight: false 
    }, { 
     BusinesDay: "Monday", 
     startTime1: "08:00", 
     endTime1: "18:00", 
     startTime2: "", 
     endTime2: "", 
     isOpen: true, 
     tradingHours: "10:00", 
     overNight: false 
    }, { 
     BusinesDay: "Tuesday", 
     startTime1: "08:00", 
     endTime1: "18:00", 
     startTime2: "", 
     endTime2: "", 
     isOpen: true, 
     tradingHours: "10:00", 
     overNight: false 
    }, { 
     BusinesDay: "Wednesday", 
     startTime1: "08:00", 
     endTime1: "18:30", 
     startTime2: "", 
     endTime2: "", 
     isOpen: true, 
     tradingHours: "10:00", 
     overNight: false 
    }, { 
     BusinesDay: "Thursday", 
     startTime1: "08:00", 
     endTime1: "18:00", 
     startTime2: "", 
     endTime2: "", 
     isOpen: true, 
     tradingHours: "10:00", 
     overNight: false 
    }, { 
     BusinesDay: "Friday", 
     startTime1: "08:00", 
     endTime1: "18:00", 
     startTime2: "", 
     endTime2: "", 
     isOpen: true, 
     tradingHours: "10:00", 
     overNight: false 
    }, { 
     BusinesDay: "Saturday", 
     startTime1: "08:00", 
     endTime1: "18:00", 
     startTime2: "", 
     endTime2: "", 
     isOpen: true, 
     tradingHours: "10:00", 
     overNight: false 
    }] 
}); 
<cells> 
    <ObjectIdentifier title="{store>BusinesDay}" /> 
    <TimePicker id="TP1_1" value="{store>startTime1}" valueFormat="HH:mm" displayFormat="HH:mm" change="onTimeChangedOpening" visible="{store>isOpen}" placeholder="Enter Opening Time" /> 
    <TimePicker id="TP1_2" value="{store>endTime1}" valueFormat="HH:mm" displayFormat="HH:mm" change="onTimeChangedClosing" visible="{store>isOpen}" placeholder="Enter Closing Time" /> 
    <TimePicker id="TP1_11" value="{store>startTime2}" valueFormat="HH:mm" displayFormat="HH:mm" change="onTimeChangedOpeningSplit" visible="{store>isOpen}" placeholder="Enter Opening time" /> 
    <TimePicker id="TP1_21" value="{store>endTime2}" valueFormat="HH:mm" displayFormat="HH:mm" change="onTimeChangedClosingSplit" visible="{store>isOpen}" placeholder="Enter Closing time" /> 
    <CheckBox id="closedChkSunday" value="{store>isOpen}" select="toggleOpenClosed" /> 
    <Text text="{store>tradingHours}" visible="{store>isOpen}" editable="false" /> 
</cells> 

kann ich den Wert Zustand auf Fehler, wenn ich die einzelnen Komponenten am Zugriff auf:

oViewComponent.setValueState(sap.ui.core.ValueState.Success); 

Wie prüfe ich alle Zeitfelder für einen Fehler in einem Rutsch mit getValueState?

Antwort

1

Es ist vielleicht nicht schön sein, aber man konnte die message model Abfrage, ob Sie die MessageManager

verwenden die MessageManager Sie am MessageManager die Bedienelemente oder eine ganze Sicht auf register haben zu verwenden. Vielleicht hast du das schon gemacht?

sap.ui.getCore().getMessageManager().registerObject(this.getView(), true); 

Dann können Sie die MessageModel vom MessageManager abzurufen. Die MessageModel enthält alle Nachrichten. Jede Nachricht mit einer target-Eigenschaft ist einer bestimmten Eigenschaft eines bestimmten Steuerelements zugeordnet. Die target-Eigenschaft enthält eine Zeichenfolge im folgenden Format: controlId/property. Da Ihre Ansicht nicht die einzige sein wird, die unter MessageManager registriert ist, müssen Sie die Nachrichten von MessageModel filtern.

var messagesModelMessages = sap.ui.getCore().getMessageManager().getMessageModel().getProperty("/"); 
var viewPrefix = this.getView().getId() + "--"; 
if ($.isArray(messagesModelMessages)) { 
    messagesModelMessages.forEach(function (message) { 
     if (message.target && message.target.startsWith(viewPrefix)) { 
      // the message is pointing to a control in this view 
      var controlId = message.target.spit("/")[0]; 
      var control = sap.ui.getCore().byId(controlId); 
     } 
    }); 
} 
+0

@hirse wie wird das Ziel in der Nachricht gesetzt? Verwendet der Parser automatisch den Bindungspfad, um Ziel-ID und -Eigenschaft zu bestimmen? – Kyle

+0

@Kyle, ich habe diese Antwort nicht geschrieben, vielleicht könnte Schnoedel helfen? – hirse

+0

@Kyle, der MessageManager verbraucht die Validierungsereignisse. Das [validationError-Ereignis] (https://sapui5.hana.ondemand.com/#docs/api/symbols/sap.ui.base.ManagedObject.html#event:validationError) enthält die Quellcodeverwaltung und die Quelleigenschaft als Argumente. Wenn der Benutzer einen ungültigen Wert eingibt, löst der sap.ui.model.Type der twoway-Bindung eine ValidationException aus. [Diese Ausnahme wird vom Control (ManagedObject) abgefangen und das validationError-Ereignis wird stattdessen ausgelöst] (https://github.com/SAP/openui5/blob/rel-1.48/src/sap.ui.core/src/sap /ui/base/ManagedObject.js#L3155). – schnoedel