ajax - 在海边用 Ajax 替换图像
问题描述
我已经在 Seaside 3.1 上工作了几天,我正在尝试使用 Ajax 设计一个简单的井字游戏。
在没有 ajax 的情况下使用以下代码效果很好:
renderContentOn: html
html heading: 'Tictactoe'.
html
form: [
1 to: 3 do: [ :row |
1 to: 3 do: [ :col |
html imageButton
url: (tictactoe imageCase: row * 10 + col);
callback: [ tictactoe playsX: row playsY: col ] ].
html break ] ]
并且使用 ajax 它根本不起作用,尽管页面没有按预期刷新。对于具有另一个 url 的简单图像,imageButton 永远不会改变。
目标只是在我单击它时将 imageButton 交换为具有另一个 url 的图像。
这是我的代码所在的位置:
renderContentOn: html
html heading: 'Tictactoe'.
1 to: 3 do: [ :row |
1 to: 3 do: [ :col |
html imageButton
url: (tictactoe imageCase: row * 10 + col);
id: 'case' , row asString , col asString;
onClick:
(html scriptaculous updater
id: 'case' , row asString , col asString;
callback: [ :r |
tictactoe playsX: row playsY: col.
r render: (html image url: (tictactoe imageCase: row * 10 + col)) ];
return: false) ].
html break ]
我是新手,对这项技术不是很好,因此我愿意听取任何答案、建议或指导。
我要提前感谢您,祝您有美好的一天。
解决方案
我的第一个建议是放弃 Scriptaculous 并改用 JQuery,前者不再开发,而 JQuery 每天维护,Seaside 也支持。
renderContentOn: html
html heading: 'Tictactoe'.
1 to: 3 do: [ :row |
1 to: 3 do: [ :col |
html imageButton
id: 'case' , row asString , col asString;
url: (tictactoe imageCase: row * 10 + col);
onClick:
(html jQuery ajax
callback: [ tictactoe playsX: row playsY: col ];
script: [ :s |
s
<<
((html jQuery id: 'case' , row asString , col asString)
replaceWith: [ :h |
h image url: (tictactoe imageCase: row * 10 + col) ]) ])].
html break ]
关键在onClick:
处理程序中,您在其中传递一个 JQuery Ajax 对象,该对象在服务器上执行回调,然后返回一个脚本 (JS),其内容具有将具有特定 id 的元素(具有 id 的 imageButton 'case' , row asString , col asString
)替换为什么的指令由replaceWith:
渲染块渲染..
您甚至可以更进一步,将 and 合并callback:
为script:
一个调用,如下所示:
onClick:
(html jQuery ajax
script: [ :s |
tictactoe playsX: row playsY: col.
s << ((html jQuery id: 'case' , row asString , col asString)
replaceWith: [ :h |
h image url: (tictactoe imageCase: row * 10 + col) ]) ])].
推荐阅读
- swift - 如何使用来自 childByAutoID 的数据填充 tableView
- google-cloud-platform - 无法在 Google Compute Engine 上创建实例
- python - 使用 LXML 和 XPath 搜索 XML 表
- javascript - JSHint 防止重新声明全局变量
- c - C努力将无符号整数打包到uint64_t中
- javascript - 使用 HTML 和 CSS 的 JS 倒计时时钟
- emacs - emacs:关闭除treemacs之外的所有窗口
- android - CardView 具有较小的主体和浮动在其外部的图像
- javascript - 当控制器中的值更改时,ngShow不更新
- python - 计算一个项目在每个嵌套列表中出现的次数