#sapui5
#sapui5
Вопрос:
У меня есть фрагмент, содержащий метки и входные компоненты. Его значения в основном устанавливаются статически, и он работает так, как ожидалось:
<Label text="Customer" />
<Input
value="John Smith"
editable="true"
change=".liveChangeVehicleGrossPrice"
/>
<Label text="Price" />
<Input
editable="true"
change=".liveChangeVehicleGrossPrice"
value="{
parts: [
'P02_Model>/VehicleGrossPrice',
'valuta>/convert'
],
type: 'sap.ui.model.type.Currency',
formatOptions: {
showMeasure: false
}
}"
/>
Теперь я создал в контроллере модель, содержащую значения, которые будут использоваться во входных компонентах: одно значение (клиент), которое будет добавлено в поле имени клиента, и два свойства ( groupingSeparator
и decimalSeparator
) для форматирования валюты:
var json = {
"groupingSeparator": " ",
"decimalSeparator": ",",
"customer": "John Wayne",
};
var model = new JSONModel(json);
this.getView().setModel(model, "P02_Model");
После создания этой модели я изменяю фрагмент, чтобы использовать эти значения:
<Label text="Customer" />
<Input
editable="true"
change=".liveChangeVehicleGrossPrice"
value="{P02_Model>/customer}"
/>
<Label text="Price" />
<Input
editable="true"
change=".liveChangeVehicleGrossPrice"
value="{
parts: [
'P02_Model>/VehicleGrossPrice',
'valuta>/convert'
],
type: 'sap.ui.model.type.Currency',
formatOptions: {
showMeasure: false,
groupingSeparator: {P02_Model>/groupingSeparator},
decimalSeparator: {P02_Model>/decimalSeparator}
}
}"
/>
Проблема в том, что при загрузке страницы имя John Wayne
правильно отображается в соответствующем вводе, но ввод, содержащий валюту, будет иметь
112[Объект object]323[Объект object]2
вместо 112 323,2
.
Каким-то образом два значения, связанные с groupingSeparator
и decimalSeparator
, которые являются строками, обрабатываются как объекты. ПОЧЕМУ?
Комментарии:
1. Я не думаю, что вы можете задавать значения для groupingSeparator с помощью привязки. Это должно быть статическое значение. Могут быть привязаны только свойства элемента управления UI5.
Ответ №1:
ПОЧЕМУ?
Это потому, что объекты binding info не являются managedObject, а простым объектом, который не поддерживает возможности привязки. Вам придется сделать это в JS.
<Input id="myInput" />
onInit: function() {
// ...
const model = this.getView().getModel("P02_Model");
this.byId("myInput").bindValue({
parts: [
"P02_Model>/VehicleGrossPrice",
"valuta>/convert"
],
type: this.createCurrencyType()
});
},
onModelDataChanged: function() {
this.byId("myInput").getBinding("value").setType(this.createCurrencyType());
},
createCurrencyType: function() {
return new CurrencyType({ // required "sap/ui/model/type/Currency"
groupingSeparator: model.getProperty("/groupingSeparator"),
decimalSeparator: model.getProperty("/decimalSeparator")
});
},