问题标签 [cl-who]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
215 浏览

common-lisp - 生成内联 javascript 的 cl-who、parenscript 和引号问题

因此,我正在使用以下代码运行 parenscript 教程:

页面呈现,但可点击的链接不起作用。当我查看源代码时,我得到以下信息:

哪个不起作用。我需要用引号“而不是半引号”关闭警报功能。我做错了什么?

0 投票
2 回答
110 浏览

lisp - cl-who 在函数调用中传递流

我正在使用 cl-who(通过 hunchentoot),到目前为止完全成功,但有一件事我无法弄清楚,而且我的解决方法很丑陋,所以我希望有一个简单的解决方法。我的 hunchentoot 简单处理程序调用看起来像这样的函数:

一切都很好。

但是,当我想从 foo 中调用辅助函数以执行...任何我想做的子工作时,我无法弄清楚如何使 CL-WHO 的 HTM 上下文通过调用进行。例如,这很好用:

但这不起作用:

(我已经尝试了各种操作,但无济于事。)

我确定我做错了一些简单的事情;必须在任何 subfn 中恢复为 t 格式是非常丑陋的,尤其是。bcs 我不能使用 cl-who 方便的 html 宏。

0 投票
1 回答
130 浏览

post - Hunchentoot 处理复选框发布请求

我正在用 Cl-who、Hunchentoot 和 Common Lisp 开发一个需要处理客户订单的 Web 应用程序。因为他们显然可以订购不止一件商品,所以我认为 Checkbox 是最有意义的。但是,问题是当我定义一个简单处理程序时,如果您有一系列具有相同名称和不同值的复选框,它不会像 PHP 中的数组那样接收结果数组。相反,它将变量视为字符串,因此我无法遍历每个已检查的 Box。这是我的代码片段:

这是我设置的处理程序(也许我需要在这里使用循环宏?)这只是一个示例,因为当我发现这个问题时,我显然会处理传递给 easy-handler 的每个参数:

这些只是有人可以检查的三个潜在输入。所以让我们假设客户检查了所有三个......只有奶酪球会返回,因为 Lisp 将名称“food[]”视为单独的字符串。我的意思是,在 PHP 中,名称 ("food[]") 的变量将像数组一样被处理。所以在 HTML 和 PHP 中它看起来像这样:

假设客户选择了所有三个复选框,我可以在 PHP 中执行类似的操作:

但是,尚不清楚如何在 Common Lisp 中使用 Cl-WHO 和 Hunchentoot 实现类似的功能。我能想到的唯一另一种选择是将大约 30 个参数传递给 easy-handler,但这听起来是解决这个问题的效率最低的方法。我知道还有一个 CL 表单处理库,但我希望避免走这条路,尽管如果这是唯一可能的解决方案,我会这样做。给每个复选框一个不同的名称似乎是解决这个问题的最糟糕的方法。

0 投票
1 回答
104 浏览

javascript - CL-WHO 总是以单引号开头

我的问题是,当 CL-WHO 将 Lisp S 表达式转换为 html 输出时,每个表达式都以单引号市场开始。这在大多数情况下都可以,但这是一个问题,因为我将我的文件链接到外部 javascript 文件。我试图让这个项目变得简单,因为我团队中的 javascript 开发人员都不知道 Common Lisp,所以使用 parenscript 可能不合适。这是我的问题的一个示例以及我的程序中的错误之一:

当在 html 文档中按下特定元素时,应该会触发一个名为 alertUser 的 JavaScript 函数,并且标签的 id 应该作为参数传递给 JavaScript 函数。但无论我做什么,CL-WHO 都会将该字符串转换为单引号,所以我最终得到一个无效的表达式。这是该代码转换为的内容:

一切都是单引号,所以 'alertUser(' 作为第一个字符串传递,这显然是无效的,我在开发人员工具中收到一个语法区域。我认为我可以通过使用带有转义字符的格式函数来解决这个问题。这将相当于:

但是当我尝试使用 CL-WHO 时:

这转化为:

这也是无效的html。如您所见,无论如何,CL-WHO 都会以单引号开头。接下来我尝试了 CL-WHO fmt 功能:

当我使用 fmt 函数时,它会在转换为 html 时完全摆脱我的 :onclick 表达式!:

最后我尝试了 str 函数,得到了与我最初尝试类似的无效输出:

显然,如果我用纯 html 编写代码,它将如下所示:

这是有效的。我的问题只是如何让 CL-WHO 在这些情况下使用双引号而不是单引号?

0 投票
1 回答
83 浏览

common-lisp - 如何从列表中生成 HTML

使用CL-WHO生成 HTML 的常用方法是使用宏with-html-outputwith-html-output-to-string. 这使用特殊的语法。例如:

是否可以将数据写入((:p :id id) message)列表而不是使用上面显示的宏语法?例如,我想将 HTML 定义为这样的列表:

CL-WHO 可以获取一个普通的 Lisp 列表并从列表中生成 HTML 吗?