【问题标题】:Seaside: Ajax callback, then append server-rendered element?Seaside:Ajax 回调,然后附加服务器渲染元素?
【发布时间】:2015-09-16 19:24:40
【问题描述】:

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

下面的代码失败了,因为 renderEmptyTurnOn 需要一个画布, 但我将其传递给脚本。

有没有一种惯用的方式来使用香草海边和 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' ]

【问题讨论】:

    标签: ajax smalltalk seaside


    【解决方案1】:

    你几乎成功了。 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' ]
    

    【讨论】:

    • 啊,谢谢!这只是一次服务器往返,因为回调:是主要的,脚本:是次要的?
    • 糟糕,不正确。 callback: 注册了一个主回调,script: 也注册了,所以它们不能合并。相反,使用callback:value:script:,或者只使用script:。我知道这有点傻,但目前就是这样。我已经修改了上面的示例以使其正常工作。
    猜你喜欢
    • 2012-09-21
    • 1970-01-01
    • 2021-04-27
    • 2018-05-17
    • 2016-07-19
    • 2012-12-10
    • 1970-01-01
    • 2016-10-06
    • 2017-02-18
    相关资源
    最近更新 更多