Вопрос по – GWT Editor Framework

5

Есть ли способ получить прокси, который редактирует редактор?

Обычный рабочий процесс будет:

 public class Class implments Editor<Proxy>{
  @Path("")
  @UiField AntoherClass subeditor;


  void someMethod(){
   Proxy proxy = request.create(Proxy.class);
   driver.save(proxy);
   driver.edit(proxy,request);
 }
}

Теперь, если я получил подредактор того же прокси

public class AntoherClass implements Editor<Proxy>{
   someMethod(){
   // method to get the editing proxy ?
    }
 } 

Да, я знаю, что могу просто установить прокси для дочернего редактора с помощью setProxy () после его создания, но я хочу знать, есть ли что-то вроде HasRequestContext, но для отредактированного прокси.

Это полезно, когда вы используете, например, ListEditor в не UI объектах.

Спасибо.

Ваш Ответ

3   ответа
0

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

7

над которым работает данный редактор. Сначала немного простых данных и простой редактор:

public class MyModel {
  //sub properties...

}

public class MyModelEditor implements Editor<MyModel> {
  // subproperty editors...

}

Первый: вместо реализацииEditorмы можем выбрать другой интерфейс, который также расширяет редактор, но позволяет субредакторам (LeafValueEditor не допускает подредакторов). Давай попробуемValueAwareEditor:

public class MyModelEditor2 implements ValueAwareEditor<MyModel> {
  // subproperty editors...

  // ValueAwareEditor methods:
  public void setValue(MyModel value) {
    // This will be called automatically with the current value when
    // driver.edit is called.
  }
  public void flush() {
    // If you were going to make any changes, do them here, this is called
    // when the driver flushes.
  }
  public void onPropertyChange(String... paths) {
    // Probably not needed in your case, but allows for some notification
    // when subproperties are changed - mostly used by RequestFactory so far.
  }
  public void setDelegate(EditorDelegate<MyModel> delegate) {
    // grants access to the delegate, so the property change events can 
    // be requested, among other things. Probably not needed either.
  }
}

Это требует, чтобы вы реализовали различные методы, как в приведенном выше примере, но основным из них будетsetValue, Вам не нужно вызывать их самостоятельно, они будут вызваны водителем и его делегатами.flush Метод также хорошо использовать, если вы планируете вносить изменения в объект - внесение этих изменений до сброса будет означать, что вы модифицируете объект вне ожидаемого жизненного цикла драйвера - не конец света, но может вас удивить позже.

Второе: используйтеSimpleEditor суб-редактор:

public class MyModelEditor2 implements ValueAwareEditor<MyModel> {
  // subproperty editors...

  // one extra sub-property:
  @Path("")//bound to the MyModel itself
  SimpleEditor self = SimpleEditor.of();

  //...
}

Используя это, вы можете позвонитьself.getValue() чтобы прочитать текущее значение.

Изменить: глядя наAnotherEditor Вы реализовали, похоже, вы начинаете делать что-то вроде класса GWTSimpleEditorхотя вам могут понадобиться и другие подредакторы:

Now if i got a subeditor of the same proxy

public class AntoherClass implements Editor<Proxy>{
  someMethod(){  
    // method to get the editing proxy ?
  }
}

Этот подредактор может реализоватьValueAwareEditor<Proxy> вместоEditor<Proxy>и быть уверенным, что егоsetValue метод будет вызываться с экземпляром Proxy, когда начинается редактирование.

Спасибо Колину за эту помощь (особенно за @Path (& quot; & quot;): у меня возник соблазн сделать @Path (& quot; this & quot;), но для этого потребовалась бы специальная обработка ...) Теперь мне бы хотелось узнать как перейти от редактора к другому в зависимости от значения данных. У меня есть поле выбора, которое должно изменить форму (многие общие поля, но макет и некоторые поля появляются / исчезают). У меня есть UiBinder для каждого типа, и я хотел бы переключаться с одного на другой по выбору пользователя. Мне не нравится идея создавать их все и делать их видимыми или нет в зависимости от ситуации. Я хотел бы создать новый редактор и присвоить ему атрибуты
Да, это работает, мне просто нужно реализовать ValueAwareEditor & lt; Proxy & gt; и setValue устанавливает прокси автоматически. Из API «Редакторы, чье поведение изменяется в зависимости от редактируемого значения, будут реализовывать этот интерфейс». Это мой случай. знак равно ics_mauricio
2

интерфейс TakesValue, вы можете получить прокси для редактирования в методе setValue.

ValueAwareEditor тоже работает, но имеет все те дополнительные методы, которые вам действительно не нужны.

Похожие вопросы