2015-01-23 8 views
0

Я хотел бы знать, есть ли функция, которая срабатывает, когда пользователь установил значение в поле, но не если значение заданного значения программы в поле.Eclipse Scout callback для ввода значения в полях

так функция:

user click on field 'myField and change value -> method fires up 
in program : myField.setValue = SomeValue; -> method doesn't fires up. 

проблема с обнаружением петли. Если ваша логика в том, что у вас есть 4 поля и попытаться обнаружить, если какие-либо из этих полей изменяются, а затем метода огня критики за изменения некоторых значения в этих полях:

@Override 
protected void execChangedValue() throws ProcessingException { 
    super.execChangedValue(); 
    valueFieldsChange(this); 
} 

protected void valueInPriceBoxFieldsChange(AbstractValueField field) { 
    ... calculate some values in those fields.... 
} 

и я получаю:

!MESSAGE org.eclipse.scout.rt.client.ui.form.fields.AbstractValueField.setValue(AbstractValueField.java:338) Loop detection in... 

Поэтому я знаю, что метод execChangedValue() не то, что я ищу. Есть ли подобный метод с объясненным поведением?

Марко

ответ

1

Пусть начинают говорить, что обнаружение контура является полезным в 90% случаев. Предупреждение отображается, когда вы находитесь внутри execChangedValue(), и вы пытаетесь обновить значение того же поля.

Если я правильно понимаю ваш пример правильно вас есть в вашем поле:

public class FirstField extends AbstractStringField { 

    @Override 
    protected void execChangedValue() throws ProcessingException { 
    calculateNewValues(); 
    } 
} 

и метод:

public void calculateNewValues() { 
    //some logic to compute the new values: value1, value2, value3 

    getFirstField().setValue(value1); 
    getSecondField().setValue(value2); 
    getThirdField().setValue(value3); 
} 

На данный момент, вы действительно должны быть уверены в том, что, когда пользователь устанавливает значение в FirstField что-то, вы можете изменить его прагматично на что-то другое. Это может быть очень запутанным для пользователя.


Если вы уверены, что вам необходимо обновить значение, есть способ, чтобы установить значение, не вызывая execChangedValue() на поле. Я предложил новый метод: setValueWithoutChangedValueTrigger (значение T) в форме Scout Eclipse: Controlling if execChangedValue() is called or not.

На форуме вы найдете фрагмент, который вы можете добавить в свое поле (или в общий шаблон: AbstractMyAppStringField).

public class FirstField extends AbstractStringField { 

    @Override 
    protected void execChangedValue() throws ProcessingException { 
    calculateNewValues(); 
    } 

    public void setValueWithoutValueChangeTrigger(String value) { 
    try { 
     setValueChangeTriggerEnabled(false); 
     setValue(value); 
    } 
    finally { 
     setValueChangeTriggerEnabled(true); 
    } 
    } 
} 

И вы будете иметь возможность использовать его:

public void calculateNewValues() { 
    //some logic to compute the new values: value1, value2, value3 

    getFirstField().setValueWithoutChangedValueTrigger(value1); 
    getSecondField().setValueWithoutChangedValueTrigger(value2); 
    getThirdField().setValueWithoutChangedValueTrigger(value3); 
} 

Я надеюсь, что это помогает.

+0

Это замечательно, но я бы хотел использовать эту функцию whit FormData. Если я установил данные формы на сервере разведки и импортировал их в разведку, я бы хотел, чтобы импорт использовал эту функцию. Это возможно? –

 Смежные вопросы

  • Нет связанных вопросов^_^