Happy Man

mash-uppy

08 2008

ExtGWTでMVC (その2)

登場するクラスは、
App.java(EntryPointです)
AppController.java
AppView.java
Modelは登場しません。

起動すると、alertのダイアログが2つ表示されます。
また
コントローラーやビュー、イベントを追加した場合、
どんな感じかとか試してみるといいかと思います。

App.java


package com.gethapp.sample.mvc.client;

import com.extjs.gxt.ui.client.mvc.Dispatcher;
import com.google.gwt.core.client.EntryPoint;

public class App implements EntryPoint {

	public static final int EVENT_INIT = 0;

	public void onModuleLoad() {
	    Dispatcher dispatcher = Dispatcher.get();

	    //Appに登場するコントローラーを登録しておく
	    //複数ある場合は、それぞれのコントローラーをaddControllerしておく
	    dispatcher.addController(new AppController());

	    //起動時はApp.EVENT_INITを発火しておく
	    dispatcher.dispatch(App.EVENT_INIT);
	}
}

AppController.java


package com.gethapp.sample.mvc.client;

import com.extjs.gxt.ui.client.mvc.AppEvent;
import com.extjs.gxt.ui.client.mvc.Controller;
import com.google.gwt.user.client.Window;

public class AppController extends Controller {
	//AppControllerが起動するView
	private AppView v;

	public AppController() {
		//AppControllerが監視しているイベントを登録しておく
		//イベントが複数ある場合は、それぞれregisterEventTypesしておく
		registerEventTypes(App.EVENT_INIT);
	}

	protected void initialize() {
		v = new AppView(this);
	}

	//イベントごとにハンドラーを記述
	//サンプルではApp.EVENT_INITだけ。。。
	public void handleEvent(AppEvent event) {
		switch (event.type) {
		case App.EVENT_INIT:
			Window.alert("AppControllerのEVENT_INIT");

			//Viewを起動
			//複数のViewを起動したい場合は、それぞれViewごとにforwardToViewする
			forwardToView(v, event);
			break;
		}
	}

}

AppView.java


package com.gethapp.sample.mvc.client;

import com.extjs.gxt.ui.client.mvc.AppEvent;
import com.extjs.gxt.ui.client.mvc.Controller;
import com.extjs.gxt.ui.client.mvc.View;
import com.extjs.gxt.ui.client.widget.ContentPanel;
import com.extjs.gxt.ui.client.widget.Viewport;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.RootPanel;

public class AppView extends View {
	private Viewport v;
	private ContentPanel cp;

	public AppView(Controller controller) {
		super(controller);
	}

	protected void initialize() {
		v=new Viewport();
		cp=new ContentPanel();
		v.add(cp);
		RootPanel.get().add(v);
	}

	//このAppViewが処理する必要があるイベントごとにハンドラを記述する
	protected void handleEvent(AppEvent event) {
		switch (event.type) {
		case App.EVENT_INIT:
			Window.alert("AppViewのEVENT_INIT");
			break;
		}
	}
}

Leave a Reply

« syntaxhighlighterのテスト クラス名が若干違うネタ »