为什么回调没有被执行? - 短暂聊天

时间:2014-11-05 22:48:13

标签: select callback smalltalk seaside

我正在制作一个将YouTube视频添加到播放列表的网络应用程序。在包含用户当前播放列表的视频的缩略图旁边显示选择,当用户单击提交按钮时,应将当前视频添加到所选播放列表。但是,我遇到了回调似乎没有执行的问题。如果答案很简单,我道歉,因为我看不出问题出在哪里:

html form with: 
    [html select with:
                     self session getPlaylists keysDo:
                     [:k | html option value: k; with: [html text:k]]];
                 callback: [:v | self session addVideo: ((searchRes at: 'items') 
                                 at: (i*2+x)) toPlaylist: v. Transcript show: 'call'].
    html break.
    html submitButton class:'tiny button';value: 'Add to Playlist']

对不起,代码是一个混乱的赌注。基本上,回调没有执行(我知道这是因为在提交表单时没有将'call'打印到脚本)。非常感谢任何澄清。

1 个答案:

答案 0 :(得分:2)

因为with:块位于错误的位置。在Seaside中,with:是使用html画布时级联中的最后一条消息。

更详细一点:

WATagBrush>>with: anObject
"Render anObject into the receiver. Make sure that you call #with: last in the cascade, as this method will serialize the tag onto the output document."

    self openTag.
    super with: [
        self before.
        canvas render: anObject.
        self after ].
    self isClosed
        ifFalse: [ self closeTag ]

其中super是对WABrush>>with:

的调用
WABrush>>with: 
    with: aBlock
    canvas nest: aBlock.
    closed := true

所以回调永远不会写在服务器发送到浏览器的响应文档中。