2016-04-19 4 views
0

Мне нужно получить доступ к объекту valueState времени списка.Доступ к getValueState для всех элементов страницы

На мой взгляд, четыре раза отображаются один набор для каждого дня. Информация представлена ​​в модели.

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> 

Я могу установить состояние значения на ошибку, когда я получить доступ к отдельному компоненту:

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

Как проверить все время поля для ошибки в одном дыхании с помощью getValueState?

ответ

1

Это не может быть красивой, но вы можете запросить message model, если вы используете MessageManager

Для использования MessageManager вы должны register элементы управления или весь вид на MessageManager. Возможно, вы уже это сделали?

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

Тогда вы можете получить MessageModel от MessageManager. MessageModel содержит все сообщения. Каждое сообщение, имеющее свойство target, связано со специфическим свойством конкретного элемента управления. Свойство target содержит строку в следующем формате: controlId/property. Поскольку ваше мнение не будет единственным зарегистрированным на MessageManager, вам необходимо отфильтровать сообщения от MessageModel.

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 Как установить цель в сообщении? Анализатор автоматически использует путь привязки для определения целевого идентификатора и свойства? – Kyle

+0

@ Kyle, я не написал этот ответ, может быть, schnoedel мог бы помочь? – hirse

+0

@Kyle, MessageManager использует события проверки. Событие [validationError] (https://sapui5.hana.ondemand.com/#docs/api/symbols/sap.ui.base.ManagedObject.html#event:validationError) имеет свойство источника и источника в качестве аргументов. Когда пользователь вводит недопустимое значение, sap.ui.model.Type привязки twoway вызывает исключение ValidationException. [Это исключение поймает элемент управления (ManagedObject), и вместо этого произойдет событие validationError] (https://github.com/SAP/openui5/blob/rel-1.48/src/sap.ui.core/src/sap /ui/base/ManagedObject.js#L3155). – schnoedel