6

是否可以将列表参数从浏览器传递到 Snap 中的处理函数?如何从列表构造多参数 URL 并将其发送到处理函数?

例如,我需要删除一些表行或任何其他对象。我不能用通常的 REST 路由来做到这一点:

("/objects/:id", method DELETE deleteObject)

仅仅因为可能太多,并且一一删除 100 行可能会有点乏味。

我通过复选框输入选择了注定的对象,比如需要删除 [3,4,6,8] 行。那么如何将该列表传递给 URL 中的处理程序,以及该操作的路由是什么样的?

更新

好吧,我终于用 jquery 和 ajax 调用做到了。Snap 的“getParams”函数可以处理多个参数 URL,但我仍然无法弄清楚如何在没有 jquery 和 ajax 的情况下实际构造 URL。

我使用 javascript 来收集要删除的项目并构建项目数组。然后我使用 ajax 构造多个参数 URL 并将其发送到处理程序。使用此方法和 Snap 需要注意的几点:

-- Snaps 的“getParams”功能只支持旧式多参数 URL:

"a=1&a=2&a=3&a=4"

而不是新的:

"a[]=1&a[]=2&a[]=3&a[]=4"

这使得传递复杂的参数变得不可能。

-- 路线应该是:

("/objects/", method DELETE deleteObject)

而不是:

("/objects/:ids", method DELETE deleteObject)

我没有回答我的问题,因为我不相信这是通过 snap 传递多个参数 URL 的唯一方法。

尽管“getParams”可以处理它,但我的问题仍然存在:如何构造 URL 并将其发送给处理程序?

例如,Rails 在视图逻辑中使用“link_to”函数来构造 URL。Snap 在模板中不使用任何逻辑,那么它是如何工作的呢?它不可能是在 snap 中传递多个参数 URL 的唯一方法是在 javascript 的帮助下......?

请有人帮我确认一下?

4

1 回答 1

4

你几乎在那里。以下表格...

<form action="/foo">
  <ul>
    <li>Row 1: <input type="checkbox" name="a" value="1"/></li>
    <li>Row 2: <input type="checkbox" name="a" value="2"/></li>
    <li>Row 3: <input type="checkbox" name="a" value="3"/></li>
    <li>Row 4: <input type="checkbox" name="a" value="4"/></li>
    <li>Row 5: <input type="checkbox" name="a" value="5"/></li>
  </ul>
  <input type="submit" name="submit" value="Submit"/>
</form>

...像这样提交。

http://localhost:8000/foo?a=2&a=3&a=5&submit=Submit

然后,在您的处理程序中,这将为您提供一个 ByteStrings 列表。

fooHandler = do
    as <- getsRequest (rqParam "a")

所以这根本不需要 JavaScript。但它也适用于 JavaScript。如果您使用 jQuery 提交这样的列表...

var fieldData = { rows: [0,1,4], cols: [2,3,5] };
$.getJSON('http://localhost:8000/foo', fieldData, ...);

...然后你必须对括号进行调整

rs <- getsRequest (rqParam "rows[]")
cs <- getsRequest (rqParam "cols[]")
于 2013-07-01T18:08:15.343 回答