0

GWT アプリケーションでエディターを利用しようとしているので、公式ドキュメントを読みました。ここにリンクの説明を入力する質問とその回答も見ましたが、エディターの最終的な「目的」はまだわかりません。例として、いくつかのフィールドを持つ UiBinder を想定します。

@UiField
TextBox name;

@UiField
TextArea comment;

@UiField
ListBox type;

...

さらにメソッド editCustomer を次のように作成します。

private void editCustomer(CustomerProxy entity) {

MyRequestFactory requestFactory = MyRequest.getRequestFactory();

CustomerRequestContext requestContext = requestFactory.customerRequest();

entity = requestContext.edit(entity);

editorDriver.edit(entity, requestContext);
}

Editor を使用したアプローチにより、UiBinder フィールドをデータベースに接続できるようになると思います。「保存」ボタンを介してデータベースにデータを送信する一般的な方法に基づいて、これはどのように行われますか?

@UiHandler("saveButton")
void onSaveButtonClick(ClickEvent event){
????
}
4

1 に答える 1

0

私はしばらくの間 MVP パターンを使用しており、さらに複雑なエディターがいくつかあります。EditorDriver をビューに配置すると、初期化時に特定のビューにバインドできるため、良いことがわかりました。私の例では、アクティビティ / ビュー インターフェイス / ビューの実装が必要です。

これは、他のアクティビティによって拡張できる抽象的なアクティビティですが、関連するコンテンツを含めました。かなりのコードを削除しましたが、これでエディターの便利な使い方がわかると思います。私のエディタは非常に複雑で、かなりの数のサブ エディタがあります。名前と説明のみを含めました。これは、エディターを処理するための非常に便利なデザイン パターンであることがわかりました。

public abstract class AbstractTaskBuilderActivity extends <E extends AnalyticsTaskProxy, R extends DaoRequest<E>> implements TaskBuilderView {


/**
 * Create a new task. This will initialize any new lists.
 * @param context The RequestContext to use to create the task.
 * @param clazz The class type to be created. 
 * @return
 */
protected E create(R context, Class<E> clazz) {
            // This is implemented in my inherited classes.
    E editableAnalyticsTask = context.create(clazz);
            // More initialization code expecially initializing arrays to empty so that 
            // any ListEditor sub editors will work.


    return editableAnalyticsTask;
}

/**
 * Call to edit the task and update the dashboards. 
 * @param context
 * @param task
 */
protected void doEdit(R context, E task) {
    RequestFactoryEditorDriver<? super AnalyticsTaskProxy, ?> driver = display.getEditorDriver();
    E editable = context.edit(task);
    context.save(editable).with(driver.getPaths()).to(new Receiver<Long>() {

        @Override
        public void onFailure(ServerFailure error) {
            display.showError(error.getMessage());
            super.onFailure(error);
        }

        public void onConstraintViolation(Set<ConstraintViolation<?>> violations) {
            display.getEditorDriver().setConstraintViolations(violations);
        }

        @Override
        public void onSuccess(Long response) {
            clientFactory.getPlaceController().goTo(getSavePlace());
        }

    });
    driver.edit(editable, context);
}


    /**
     * Save the task.
     */
        @Override
    public void onSaveTask() {

        RequestFactoryEditorDriver<? super AnalyticsTaskProxy, ?> driver = display.getEditorDriver();

        RequestContext request = driver.flush();
        request.fire();
    }

}

私のビューインターフェース

public interface TaskBuilderView extends View {

    public interface Presenter {
        void onSaveTask();
    }

    public RequestFactoryEditorDriver<AnalyticsTaskProxy, ?> getFactoryEditorDriver();

    public void setPresenter(Presenter presenter);
}

私のビューの実装

public class AnalyticsTaskBuilderViewImpl extends ViewImpl implements AnalyticsTaskBuilderView, Editor<AnalyticsTaskProxy> {

    interface AnalyticsTaskBuilderDriver extends RequestFactoryEditorDriver<AnalyticsTaskProxy, AnalyticsTaskBuilderViewImpl> {
    }

    /**
     * UiBinder implementation.
     * 
     * @author chinshaw
     * 
     */
    @UiTemplate("AnalyticsTaskBuilderView.ui.xml")
    interface Binder extends UiBinder<Widget, AnalyticsTaskBuilderViewImpl> {
    }

    /**
     * Name component for the name of the analytics operation.
     * This also implements {@link HasEditorErrors so it can show 
     * constraint violations when an error occurs.
     */
    @UiField
    ValueBoxEditorDecorator<String> name;

    /**
     * Description component that edits analytics operation description.
     * This also implements {@link HasEditorErrors} so it can show
     * constraint violations when an error occurs
     */
    @UiField
    ValueBoxEditorDecorator<String> description;

    public AnalyticsTaskBuilderViewImpl(Resources resources) {
        super(resources);
        // Must initialize the view before calling driver initialize 
        initWidget(GWT.<Binder> create(Binder.class).createAndBindUi(this));
        driver.initialize(this);
    }

    @Override
    public void setPresenter(Presenter presenter) {
        this.presenter = presenter;
        bindToPresenter();
    }

    // Save the task
    @UiHandler("saveTask")
    void handleClick(ClickEvent clickEvent) {
        presenter.onSaveTask();
    }

    @Override
    public RequestFactoryEditorDriver<AnalyticsTaskProxy, ?> getEditorDriver() {
        return driver;
    }
}
于 2012-09-12T16:04:54.413 に答える