Добавление ограничения на Xpages столбца сетки данных Dojo

Как я могу добавить валютное ограничение в djxDataGridColumn в макете Dojo

Программно я буду использовать:

{ name: 'Amount', field: 'col5', formatter: formatCurrency, constraint: {currency: 'EUR'}, widgetClass: HorizontalSlider, width: 10}

Но как я могу сделать это в XPages:

<xe:djxDataGridColumn id="djxDataGridColumn10" editable="true" label="Amount " field="Amount " width="50px" cellType="dojox.grid.cells._widget"
formatter="formatCurrency">
</xe:djxDataGridColumn>

Мне нужно иметь возможность проверить ввод столбца при редактировании сетки

function formatCurrency(value){
        return isNaN(value) ? '...' : currency.format(value, {currency: "EUR"});
    }

Сообщение об ошибке при вводе строки Сообщение об ошибке при вводе строки


person simon peter    schedule 02.12.2015    source источник
comment
Можете ли вы добавить более общую информацию о том, что вы делаете? Я запутался, когда пользователь вводит данные в сетку, тем более что ваш столбец установлен как редактируемый = false.   -  person Steve Zavocki    schedule 02.12.2015
comment
редактируемый = истина. у меня есть обновление выше, я хочу, чтобы ячейка принимала только числа или дроби, а не строку   -  person simon peter    schedule 02.12.2015
comment
Вы можете просто ограничить количество символов, которые вы можете ввести, до 0-9 и вашего десятичного разделителя (. для США, в некоторых странах используется ,). Это другой подход, когда клавиши клавиатуры ограничены, но значение не проверяется. Вы хотите, чтобы я сделал ответ, который показывает это?   -  person Steve Zavocki    schedule 02.12.2015
comment
да, пожалуйста, это было бы здорово   -  person simon peter    schedule 02.12.2015


Ответы (2)


Определите свой столбец без свойства cellType

  <xe:djxDataGridColumn
     id="djxDataGridColumn10"
     editable="true"
     label="Amount "
     field="Amount"
     width="50px"
     formatter="formatCurrency">
  </xe:djxDataGridColumn>

и измените свой код CSJS на

require(["dojo/currency"]);
function formatCurrency(value){
    return isNaN(value) ? '...' : dojo.currency.format(value, {currency: 'EUR'});
}

Ограничение {currency: 'EUR'} преобразует и отображает значения в валюте EUR €:

введите здесь описание изображения

Если значение недействительно, оно показывает "...".

person Knut Herrmann    schedule 02.12.2015
comment
Сэр, что, если я хочу, чтобы в ячейке отображалось сообщение об ошибке подсказки, подобное приведенному выше? - person simon peter; 04.12.2015
comment
Вы бы использовали виджет dijit.form.CurrencyTextBox для отображения подсказки сообщения об ошибке, но, к сожалению, я пока не смог заставить его работать с XPages. - person Knut Herrmann; 05.12.2015
comment
Здравствуйте, сэр, можно ли заставить сетку принимать ввод немецкой валюты с запятой вроде 465,87 вместо 456,87? - person simon peter; 11.12.2015

Саймон,

Вы можете ограничить клавиши клавиатуры, которые разрешено набирать пользователю, чтобы они не могли вводить буквенные символы. Эта опция не проверяет числовое содержимое, вам придется делать это отдельно, если это необходимо.

Вам нужно будет создать клиентскую функцию, которая действует на событие onkeypress.

Код будет выглядеть примерно так:

var keyCode = event.keyCode;
if((keyCode >= 48 && keyCode <= 57) || keyCode == 8 || keyCode == 46){
   event.returnValue = true;
}else{
   event.returnValue = false;
}

В этом примере разрешены числа, а также возврат и удаление. Если вы хотите разрешить разделитель дробей, измените это, чтобы разрешить его. Простой способ найти код ключа — использовать http://keycode.info/.

Вот сообщение в блоге, которое я написал в прошлом месяце на эту тему: http://notesspeak.blogspot.com/2015/11/limiting-keyboard-input-in-xpages.html

Несмотря на заголовок сообщения в блоге, это просто клиентский javascript, а не специфичный для XPages. Вы также можете использовать dojo или jQuery для достижения той же цели.

person Steve Zavocki    schedule 02.12.2015