Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   Событие change не генерируется при вызове Ext.form.field.Number.setValue() (https://javascript.ru/forum/extjs/57355-sobytie-change-ne-generiruetsya-pri-vyzove-ext-form-field-number-setvalue.html)

khusamov 31.07.2015 08:43

Событие change не генерируется при вызове Ext.form.field.Number.setValue()
 
Для события change (http://docs.sencha.com/extjs/5.1/5.1...r-event-change) в документации написано следующее:

Цитата:

The value of a field is checked for changes when the field's setValue method is called and...

Если я правильно понимаю, то при вызове setValue() это событие должно генерироваться (при условии, что новое значение не равно старому, конечно).

Но на практике событие change при вызове setValue() не генерируется.

Почему? Как сделать, чтобы генерировалось?

novikov 31.07.2015 13:20

Посмотрел код, который может оказать влияние на результат.

Предполагаю, что либо поле убито, либо значения одинаковые:

!me.isDestroyed

String(value1) === String(value2)


setValue: function(value) {
        var me = this;
        me.value = value;
        me.checkChange();
        return me;
    },

    checkChange: function() {
        var me = this,
            newVal, oldVal;
            
        if (!me.suspendCheckChange) {
            newVal = me.getValue();
            oldVal = me.lastValue;
                
            if (!me.isDestroyed && me.didValueChange(newVal, oldVal)) {
                me.lastValue = newVal;
                me.fireEvent('change', me, newVal, oldVal);
                me.onChange(newVal, oldVal);
            }
        }
    },

    didValueChange: function(newVal, oldVal){
        return !this.isEqual(newVal, oldVal);
    },

    isEqual: function(value1, value2) {
        return String(value1) === String(value2);
    },


Либо приостановлена проверка изменений:

!me.suspendCheckChange

khusamov 01.08.2015 01:16

Хмм... странно, провел тест:
!suspendCheckChange= true !isDestroyed= true didValueChange= true


ладно, буду копать свой код... похоже где-то что-то не так связалось...

khusamov 01.08.2015 01:31

Разобрался!!!

Оказывается надо было выставить опцию decimalPrecision: 10

itemId: "radius",
xtype: "numberfield",
fieldLabel: "Радиус",
labelWidth: 50,
step: 10,
value: 100,
decimalPrecision: 10


там по умолчанию decimalPrecision равен 2, а у меня радиус из формулы выходил со всеми знаками после запятой. В итоге иногда похоже старое значение равнялось новому... хотя didValueChange всегда равнялся = true... что весьма странно...

В общем когда я выставил 10 то все заработало. И зачем там стоит по умолчанию 2???

khusamov 01.08.2015 01:34

Цитата:

хотя didValueChange всегда равнялся = true... что весьма странно...
Понял почему didValueChange выдывал true всегда. На его вход я подавал все знаки после запятой, а внутри numberfield он обрезался до двух и выдавал false. Вот засада-то!!! Два дня к черту под хвуост

bastrakov 03.08.2015 14:38

"Соединяю Ext JS 5, Zend Framework 2 и PostreSQL 9 на IDE Cloud9. "

гм... соединяю java + extjs + oracle на netbeans. :-)

khusamov 03.08.2015 19:22

Цитата:

java + extjs + oracle на netbeans.
все мы здесь ради extjs))))

а вообще интересно кто на чем пишет
для расширения кругозора


Часовой пояс GMT +3, время: 22:14.