Seaside:Ajax 回调,然后附加服务器渲染元素?

Seaside: Ajax callback, then append server-rendered element?

我的目标是创建一个菜单项(一个跨度),单击该菜单项时 三件事。首先,它在服务器上设置一些状态(addTurn),然后 它在服务器上创建一个新元素 (renderEmptyTurnOn) 并发送 它给客户。然后客户收到新元素, 使用 class #zdTurns 将其附加到特定元素。我只想要一个 服务器往返。

下面的代码失败了,因为 renderEmptyTurnOn 需要 canvas, 但我传递给它的是一个脚本。

有没有一种惯用的方法可以使用 vanilla seaside 和 jquery?

renderMenuOn: h
    h div
        class: 'zdDialogMenu';
        with: [ 
                    h span
                        onClick:
                                (h jQuery ajax
                                        callback: [ self dialog addTurn ];
                                        script: [ :s | s << ((s jQuery class: #zdTurns) append: (s jQuery html: (self renderEmptyTurnOn: s))) ]);
                        with: 'Add Turn' ]

你几乎成功了。 jQuery 实例上的 append: 消息的参数接受可渲染对象。这可以是字符串、Seaside 组件或块。这意味着您可以按如下方式进行:

renderMenuOn: h
  h div
    class: 'zdDialogMenu';
    with: [ 
       h span
          onClick: (h jQuery ajax
                        script: [ :s | 
                                 self dialog addTurn.
                                 s << ((s jQuery class: 'zdTurns') append: [:r | self renderEmptyTurnOn: r ]) ]);
          with: 'Add Turn' ]