首先,当商店的 Web 页首次装入时,我想检查保存在会话中的 Cart 的状态,看是否已经有一个购物车了。这是必需的,因为用户可能已经向 Cart 中添加了商品,然后刷新了页面或者导航到其他地方之后又返回来。在这些情况下,重新载入的页面需要用会话中的 Cart 数据对自己进行同步。我可以在页面的onload 函数中用一个调用做到这一点,就像这样:Cart.getCart(displayCart)。请注意 displayCart() 是一个回调函数,由服务器返回的 Cart 响应数据调用。
如果 Cart 已经在会话中,那么 creator 会检索它并调用它的 getCart() 方法。如果会话中没有 Cart,那么 creator 会实例化一个新的,把它放在会话中,并调用 getCart() 方法。
清单 7 显示了 addToCartButtonHandler() 函数的实现,当点击商品的 Add to Cart 按钮时会调用这个函数:
清单 7. addToCartButtonHandler() 实现
由 DWR 负责所有通信,所以客户上的添加到购物车行为就是一个函数。清单 8 显示了这个示例的最后一部分 —— displayCart() 回调的实现,它用 Cart 的状态更新用户界面:
清单 8. displayCart() 实现
在这里重要的是要记住,simpleContents 是一个把 String 映射到数字的 JavaScript 数组。每个字符串都是一个商品的名称,关联数组中的对应数字就是购物车中该商品的数量。所以表达式cart.simpleContents[item] + " x " + item 可能就会计算出 “2 x Oolong 128MB CF Card” 这样的结果。