Seasideへ戻る

Taskの概要

Webアプリケーションでのフロー制御を行うための仕組みがWATask(WAComponentのサブクラス)に実装されています.コーディングは#goメソッドを実装してそこにページ遷移処理を書きます.Webアプリケーションにタスクを導入するには,例えばWebアプリケーショントップページのComponentの#renderContentOn:でWATaskのインスタンス(下記例では'task')を下記のように実装します.

renderContentOn: html
	html divNamed: 'body' with: task

isolate

SeasideにはWebブラウザの「戻る」で「元の状態に戻る」ことが可能なフェーズを保証するような仕組みがある。使うにはWAComponent>>#isolate:を使います.サンプルとしてWATransactionTestクラスの実装を下記に示す.

go
	self inform: 'Before parent txn'.
	self isolate: 
		[self inform: 'Inside parent txn'.
		self isolate: [self inform: 'Inside child txn'].
		self inform: 'Outside child txn'].
	self inform: 'Outside parent txn'

上記のように#isolate:に現在の処理と分離したい処理をブロックで渡します.

call/answer

ページ遷移して他のコンポーネントを表示後元の制御に戻すにはWAComponent>>callを使います.呼び出し先のコンポーネントから戻り値を渡したい場合はWAComponent>>answer:を使います.

Caller>>go
	"ここでcalleeへページ遷移する"
	x := self call: (callee new) . 
	x asString.
Callee>>go
	"いろいろ"
	self answer: name.
Caller>>go
	x := self call: B .
	x asString.
		> ’Hideo Kawamura'

WATaskクラスコメント

I am a subclass of WAComponent, specialized for defining workflow. The difference between a task and a component is the following:

Both of them are reusable, embeddable, callable pieces of user interface. A component has state (instance variables), behavior (it may change its state, and it may also choose to display other components with #call:), and appearance (it renders HTML). A Task has only the first two - it doesn't render any HTML directly, but only through the components it calls. This is useful when what you want to encapsulate/embed/call is purely a process (show this component, then this one, then this one).

The key method for WATask is #go - as soon as a task is displayed, this method will get invoked, and will presumably #call: other components.

In terms of implementation, you can think of a WATask in the following way: it is a component which renders two things:

  • a link whose callback invokes the #go method
  • a header that immediately redirects to the URL of that link

コメント・つっこみ



Last-modified: 2007-02-06 (火) 21:21:10 (4635d)