- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我有一个使用此代码可以正常工作的非 Ajax 回调(“convert”方法计算“result”实例变量的新值):
html form: [
html text: 'Number to convert: '.
html textInput
callback: [ :value | self setNumtoconvert: value ];
value: numtoconvert.
html break.
html text: 'Result: '.
html text: result.
html break.
html submitButton
value: 'Convert';
callback: [ self convert ]
].
...现在我正在尝试使用 jQuery 对其进行“Ajax 化”。我一直在尝试以下方法:
(html button)
onClick: ((html jQuery ajax)
callback: [ self convert]);
id: 'calclink';
with: 'Convert'.
...这不起作用,因为我显然缺少一些 secret 武器。 Seaside 专家能给我一个关于将“常规”回调代码转换为“jQuery Ajax”回调代码的快速教程吗?
更新我已经非常接近弄清楚这一点了;在搜索 Web 并重新审阅 Seaside 书中的草稿章节后,我将 Ajax 化按钮更改为:
(html button)
onClick: ((html jQuery ajax)
callback:[:val | self setNumtoconvert: val.
self convert.
Transcript show: self getResult.]
value:(html jQuery: '#txtNumToConvert') value;
onComplete: ((html jQuery: '#txtResult') value: self getResult)
);
id: 'calclink';
with: 'Convert'.
现在唯一的问题是如何设置“#txtResult”文本框的值; Transcript show: self getResult
显示正确的值,但我无法获取“onComplete”行来更新“#txtResult”值。我可以使用 onComplete: ((html jQuery: '#txtResult') value: 'hello there')
在文本框中插入字符串常量,但 self getResult
不是' t 为文本框提供值,尽管在转录窗口中显示 self getResult
时我再次获得了正确的值。
更新两个我的“onComplete”行确实有效,但只有在按下按钮(计算值)、刷新页面,然后再次按下按钮(在“txtResult”文本框中显示计算值)之后才能工作。我该如何解决这个问题?
我的答案
我终于想出了一个我真正喜欢的更容易理解(对我而言)且不那么冗长的解决方案:
renderContentOn: html
html form:[
html textInput
id: #txtNumToConvert;
callback: [ :value | self setNumtoconvert: value ];
value: numtoconvert.
html break.
html span
id: #result;
with: result.
html break.
html anchor
url: 'javascript:void(0)';
onClick: ((html jQuery id: #result) load
serializeForm;
html: [self convert. html span with: result]);
with: 'Convert to Decimal'.
]
最佳答案
首先,您还需要触发表单内字段的回调。以下代码将点击事件处理程序附加到执行 ajax 请求的按钮,该请求将序列化整个表单,然后执行按钮的回调。
(html button)
onClick: ((html jQuery ajax)
serializeForm;
callback: [ self convert ]);
id: 'calclink';
with: 'Convert'.
当您使用常规表单提交时,Seaside 将为您触发表单内所有字段的回调。当你想以ajax请求触发表单提交时,Seaside-jQuery的#serializeForm方法也会序列化表单内所有输入字段的内容,并在服务器端以ajax方式触发它们的回调请求,就像在“标准”表单提交中一样。无需更改表单的实现!
接下来,您将希望抑制按提交按钮的默认浏览器行为,该行为会在 POST 请求中提交表单并导致浏览器发出整页请求,从而导致 Seaside 进行(重新)渲染这一页。有多种方法可以做到这一点,但简单地更改按钮的类型是一种简单的方法:
(html button)
bePush;
...
最后,您需要更新页面内容。您对 #onComplete:
的使用是正确的,只是此 javascript 代码是在您首次呈现页面时生成的。因此,它在渲染页面时渲染 self getResult
的值。您想要的是执行表单提交后的值。这需要另一个回调:
(html button)
bePush;
onClick: ((html jQuery ajax)
serializeForm;
callback: [ self convert ];
onComplete: ((html jQuery: '#txtResult') load html: [:r | self renderTextResultContentsOn: r]));
id: 'calclink';
with: 'Convert'.
更新上面的代码对服务器执行两次调用,您可以通过将回调组合到单个 ajax 请求中来优化:
(html button)
bePush;
onClick: ((html jQuery ajax)
serializeForm;
script: [:s | self convert. s << ((s jQuery: '#txtResult') html: [:r | self renderTextResultContentsOn: r])]);
id: 'calclink';
with: 'Convert'.
或者,更优雅的是:
(html button)
bePush;
onClick: ((html jQuery id: #count) load
serializeForm;
html: [:r | self convert. self renderTextResultContentsOn: r]);
with: 'Convert'.
上面的代码生成一个 ajax 请求,该请求执行表单序列化(执行其服务器端回调)并生成脚本来修改页面上的结果。我将 self Convert
放在脚本回调中的原因是 Seaside-gotcha:你只能在每个 ajax 请求上指定一个“响应生成”回调(例如,只有一个脚本、html、json 回调)根据要求)。这是一个逻辑限制,因为单个请求只能生成单个响应。但是,您可以添加多个“辅助”回调(例如序列化表单回调、callback:json:
等),但使用 #callback:
指定回调> 也是 Seaside 代码中的主要回调。因此,我需要将 self Convert
放在脚本回调中,而不是放在它自己的回调 block 中。
关于jquery - Smalltalk Seaside - jQuery Ajax 回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29756591/
在带有 jQuery 的 CoffeeScript 中,以下语句有什么区别吗? jQuery ($) -> jQuery -> $ - > 最佳答案 第一个与其他两个不同,就像在纯 JavaScr
已关闭。这个问题是 off-topic 。目前不接受答案。 想要改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 已关闭13 年前。 Improve th
就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,visit
这个问题可能听起来很愚蠢,但请耐心等待,因为我完全是初学者。我下载了两个 jQuery 版本,开发版本和生产版本。我想知道作为学习 jQuery 的初学者,什么更适合我。 最佳答案 如果您对 jQue
The documentation说要使用 1.6.4,但我们现在已经升级到 1.7.2。 我可以在 jQuery Mobile 中使用最新版本的 jQuery 吗? 最佳答案 您当然可以,但如果您想
我在这里看到这个不错的 jquery 插件:prettyphoto jquery lightbox有没有办法只用一个简单的jquery来实现这样的效果。 我只需要弹出和内联内容。你的回复有很大帮助。
很明显我正在尝试做一些 jQuery 不喜欢的事情。 我正在使用 javascript 上传图片。每次上传图片时,我都希望它可见,并附加一个有效的删除脚本。显示工作正常,删除则不然,因为当我用 fir
这两个哪个是正确的? jQuery('someclass').click(function() { alert("I've been clicked!"); }); 或 jQuery('somec
我正在寻找一个具有以下格式的插件 if (jQuery)(function ($) { -- plugin code -- })(jQuery); 我明白 (function ($)
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭10 年前。 Improv
我知道这个问题已经被问过几次了,但想知道您是否可以帮助我解决这个问题。 背景:我尝试创建一个使用 Ajax 提交的表单(jQuery 表单提交)。我已经工作得很好,然后我想在表单上得到验证。我可以使用
我正在使用无处不在的jquery validate plugin用于表单验证。它支持使用metadata plugin用于向表单元素添加验证规则。 我正在使用此功能。当验证查找这些规则时,它会对元素进
我更喜欢为我一直在开发的网络社区添加实用的视觉效果,但随着事情开始堆积,我担心加载时间。 拥有用户真的更快吗加载(希望是缓存的)副本来自 Google 存储库的 jquery? 是否使用 jQuery
这个问题已经有答案了: Slide right to left? (17 个回答) 已关闭 9 年前。 你能告诉我有没有办法在 jQuery 中左右滑动而不使用 jQuery UI 和 jQuery
我如何找出最适合某种情况的方法?任何人都可以提供一些示例来了解功能和性能方面的差异吗? 最佳答案 XMLHttpRequest 是原始浏览器对象,jQuery 将其包装成一种更有用和简化的形式以及跨浏
运行时 php bin/console oro:assets:build ,我有 11 个这样的错误: ERROR in ../node_modules/jquery-form/src/jquery.
我试图找到 jQuery.ajax() 在源代码中的定义位置。但是,使用 grep 似乎不起作用。 在哪里? 谢谢。 > grep jQuery.ajax src/* src/ajax.js:// B
$.fn.sortByDepth = function() { var ar = []; var result = $([]); $(this).each(function()
我的页面上有多个图像。为了检测损坏的图像,我使用了在 SO 上找到的这个。 $('.imgRot').one('error',function(){ $(this).attr('src','b
我在理解 $ 符号作为 jQuery 函数的别名时遇到了一些麻烦,尤其是在插件中。你能解释一下 jQuery 如何实现这种别名:它如何定义 '$' 作为 jQuery 函数的别名?这是第一个问题。 其
我是一名优秀的程序员,十分优秀!