📄 ch03s04.html
字号:
<html><head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>4. 部件之间的call和answer</title><link rel="stylesheet" href="html.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.69.1"><link rel="start" href="index.html" title="Java网络程序员看Continuation"><link rel="up" href="ch03.html" title="Chapter 3. Seaside框架"><link rel="prev" href="ch03s03.html" title="3. Multi例子与对象模型"><link rel="next" href="ch03s05.html" title="5. 网络版猜数字游戏"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">4. 部件之间的call和answer</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch03s03.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Seaside框架</th><td width="20%" align="right"> <a accesskey="n" href="ch03s05.html">Next</a></td></tr></table><hr></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e360"></a>4. 部件之间的call和answer</h2></div></div></div><p>刚刚我们看到了Seaside正确处理回退键,现在我们来看看它是如何保存while等控制结构的。完成这个任务的主要工具就是部件之间的call和answer。这里我们用一个例子来说明call/answer的使用。我们希望修改WACounter,让它在用户选择“++”时询问用户是否真的要增加counter,如下图:</p><div class="screenshot"><div class="mediaobject"><img src="resources/counter-confirm.png"></div></div><p>如果用户选择yes,那么我们就将counter加一,否则counter的值不变。我们的代码非常简单。把WACounter的increase函数改为下面的代码,然后单击Accept。注意到renderContentOn函数,也就是WACounter生成的HTML页面完全不需要修改。</p><pre class="programlisting">increase | yesNoDialog | yesNoDialog _ WAYesOrNoDialog new. yesNoDialog addMessage: 'Increase counter?'. (self call: yesNoDialog) ifTrue: [count _ count + 1].</pre><p>相应的Java风格的代码为(以下的代码不是任何语言):</p><pre class="programlisting">void increase() { Object yesNoDialog; yesNoDialog = new WAYesOrNoDialog(); yesNoDialog.addMessage(“Increase counter?”); if (call(yesNoDialog)) { counter = count + 1; }}</pre><p>这里首先我们创建一个WAYesOrNoDialog对象。WAYesOrNoDialog是 Seaside-Components-Dialogs类别里的一个类,该类别还有别的很多对话框,例如login对话框等等。我们向yesNoDialog里加入一条消息。接下来,我们调用对象自身的call函数,参数为yesNoDialog。这个call的意义是暂时将WACounter对象本身从页面上拿下来,在原来是WACounter的地方换上yesNoDialog。同时WACounter的运行会暂停,直到yesNoDialog调用自己的answer函数。</p><p>所以在我们调用call之后,用户就会看到“Increase counter?”对话框。那么用户点击yes或no之后WAYesOrNoDialog如何反应呢?我们来看WAYesOrNoDialog的代码:</p><pre class="programlisting">yes self answer: trueno self answer: false</pre><p>WAYesOrNoDialog简单地调用answer函数。从WACounter看来,这时call()函数会返回。如果用户选择yes,那么call返回true,否则call返回false。另外,answer也会把WAYesOrNoDialog从页面上拿下来,代之以原来的WACounter。</p><p>接下来就很简单了,如果call返回true,那么我们把counter加1。</p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch03s03.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="ch03.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ch03s05.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">3. Multi例子与对象模型 </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> 5. 网络版猜数字游戏</td></tr></table></div></body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -