Smalltalk 使用灯箱:在海边';WAS组件显示在光晕中,但浏览器不显示';你没有表现出来吗?

Smalltalk 使用灯箱:在海边';WAS组件显示在光晕中,但浏览器不显示';你没有表现出来吗?,smalltalk,pharo,seaside,Smalltalk,Pharo,Seaside,只是想在Ajax章节的灯箱中显示编辑器 我能想到的唯一一件事是,当我们到达本章时,StLoggedInComponent不再是根组件,在任务章节中切换到StRootTask。lightbox:method实现警告说,它可能只有在从根组件调用时才起作用?检查浏览器中的元素显示html存在但不可见,因此它可能只是浏览器的绊脚石Scriptaculous,但下载了较旧的Firefox 4,问题仍然存在。我是否必须在某个地方用儿童方法报告它 以下是打印屏幕和生成的html: 评估元素。显示(“灯箱”)

只是想在Ajax章节的灯箱中显示编辑器

我能想到的唯一一件事是,当我们到达本章时,StLoggedInComponent不再是根组件,在任务章节中切换到StRootTask。lightbox:method实现警告说,它可能只有在从根组件调用时才起作用?检查浏览器中的元素显示html存在但不可见,因此它可能只是浏览器的绊脚石Scriptaculous,但下载了较旧的Firefox 4,问题仍然存在。我是否必须在某个地方用儿童方法报告它

以下是打印屏幕和生成的html:

评估元素。显示(“灯箱”);在控制台中,编辑器显示在列表的正下方,但没有灯箱效果。响应是此div包含编辑器

<div id="lightbox" style=""><div class="generic lightbox"><h1>Editing task</h1><form accept-charset="utf-8" method="post" action="/sttodo?_s=FqZr4RP_dLxEUf59&amp;_k=Ewy2Ngig00mj4yiH"><table><tbody><tr><td>Name: </td><td><input name="17" type="text" class="text"></td></tr><tr><td>Description: </td><td><textarea rows="auto" cols="auto" name="18"></textarea></td></tr><tr><td>Deadline: </td><td><select name="19"><option value="1">January</option><option value="2" selected="selected">February</option><option value="3">March</option><option value="4">April</option><option value="5">May</option><option value="6">June</option><option value="7">July</option><option value="8">August</option><option value="9">September</option><option value="10">October</option><option value="11">November</option><option value="12">December</option></select>&nbsp;<input value="02" name="20" size="2" maxlength="2" type="text" class="text">&nbsp;<input value="2016" name="21" size="4" maxlength="4" type="text" class="text"><input name="22" type="hidden" class="hidden"></td></tr><tr><td>Completed: </td><td><select name="23"><option value="1">yes</option><option value="2" selected="selected">no</option></select></td></tr><tr><td></td><td><input name="24" value="Save" type="submit" class="submit"><input name="25" value="Cancel" type="submit" class="submit"></td></tr></tbody></table></form></div></div>
编辑任务名称:说明:截止日期:1月2日至3月4日至5月6日

有一种方法叫做
#lighter

lighter
^ 'updateLightbox();Event.observe(window,"resize",function(){updateLightbox();});'
此方法调用
#script
方法中定义的
updateLightbox()
函数。在脚本的最后一行,您将看到
Element.show(“lightbox”)
,它在
lightbox
节点上调用scriptaculous
show()
函数。查看您的检查器并尝试评估
元素。show(“lightbox”)。您应该看到灯箱或(更有可能)错误消息。我怀疑您可能已经包含了jQuery,它不能与scriptaculous一起工作(scriptaculous需要原型)

要检查是否包含原型,可以评估
$(“lightbox”)
。在Prototype中,这将返回id为
lightbox
的节点,在jQuery中,它将是一个空的jQuery对象(因为
“lightbox”
被解释为CSS选择器)

更新 我去检查了灯箱密码。这里确实有一个错误,至少在与3.1一键图像一起发布的Seaside版本中是这样。问题是脚本被解释为JavaScript字符串,而不是代码。要查看效果(而不是实际修复),可以修改方法
WAScriptGenerator>>writeLoadScriptsOn:
,如下所示:

self loadScripts
    collect: [ :script|
        script isString
            ifTrue: [ JSStream on: script ]
            ifFalse:[ script ] ]   
        thenDo: [ :each |
            aDocument stream javascript: each.
            aDocument  nextPut: $; ]
额外的
#collect:
将确保脚本的正确编码(引用)

问题很明显,Seaside 3对JavaScript对象模型进行了重大更改,但在lightbox代码中没有完成这些更改,因为现在大多数人都使用jQuery,所以这个问题没有引起注意

如果您订阅了Seaside邮件列表,请在那里提交错误报告。如果你没有,告诉我,我可以帮你

更新2
供参考的问题报告:

从Seaside 3.0更改为3.1,脚本应始终是
JSObject
(子)实例。因此,解决方法应该是将
打火机方法更改为:

lighter
    ^ JSStream on: 'updateLightbox();Event.observe(window,"resize",function(){updateLightbox();});'

Smalltalk字符串现在总是转换为Javascript字符串。更改是因为这个问题:但它确实没有很好的文档记录(很抱歉)。

您能发布生成的HTML吗?仅仅通过查看代码很难判断问题可能是什么。编辑了问题。谢谢现在开始使用Scriptaculous&Prototype有什么特别的原因吗~5年前,所有新的开发都转移到了jQuery上,而您在这里所做的很多工作都不是那么容易翻译的。大多数教程都太旧了,没有更新过。我正在一个接一个地跟踪他们,试图学习并记录勘误表、解决方案等。我会通知所有者,并尽可能报告错误。你可能会说这是我自己帮助别人和保持动力的方式。我是为book.Seaside.st上的Seaside书做这项工作的,但是现在评论被禁用了,我不能再报告任何事情了。jQuery的章节需要很多的爱,我甚至想过更新整本书,但我不知道谁有“钥匙”。使用了Chrome和Safari以及评估元素。show(“lightbox”);在Inspector->Console中,编辑器显示在列表下方,只是普通组件。编辑了问题的细节。我开始觉得没什么不对,可能是库太旧了,在新的浏览器上效果不再像预期的那样好了?还评估了$(“lightbox”),我得到了包含编辑器的HTML,原型正在工作。很好,我们设法解决了这个错误。我将代码添加到我的图像中,但是症状相同,仍然没有lightbox。你确定没有修改任何其他内容吗?我没有创建你的示例。我用
javascript/scriptaculous
test页面测试了更改,那里的“示例源代码”链接打开了一个lightbox。我建议你尝试一下。有更多的时间来深入研究这个bug并点击周围。您修复了示例中的大多数其他“示例源”按钮。在javascript/scriptaculous中,尝试转到顶部的拖放菜单并单击这些页面上的按钮。谢谢你抽出时间。
lighter
^ 'updateLightbox();Event.observe(window,"resize",function(){updateLightbox();});'
self loadScripts
    collect: [ :script|
        script isString
            ifTrue: [ JSStream on: script ]
            ifFalse:[ script ] ]   
        thenDo: [ :each |
            aDocument stream javascript: each.
            aDocument  nextPut: $; ]
lighter
    ^ JSStream on: 'updateLightbox();Event.observe(window,"resize",function(){updateLightbox();});'