将对象从Pug模板发送到javascript函数

问题描述

我有一个node.js + pug应用程序堆栈。我可以发送删除请求,但正文的放置/发布请求有问题。 我的哈巴狗桌子是这样的

    table.table.table-striped.text-center
        each order in orders
            tr
                td #{order.id}
                td #{moment(order.date).format('DD.MM.yyyy hh:mm:ss')}
                td #{order.total_price} €
                td
                    button.btn.btn-success(onClick="archiveOrder(" + order + ")")
                        i.fa.fa-archive
                td
                    button.btn.btn-danger(onClick="deleteOrder(" + order.id + ")")
                        i.fa.fa-trash-o
        else
            tr
                td(colspan=7) There are no items

我在哈巴狗中包含了一个脚本文件,其内容如下:

function deleteOrder(id) {
    $.ajax({
        type: "DELETE",url: "/orders/" + id,success: function () {
            location.reload()
        }
    });
}

function archiveOrder(order) {
    order.archived = true;
    $.ajax({
        type: "PUT",contentType: 'application/json',dataType: 'json',url: "/orders/" + order.id,data: JSON.stringify(order),success: function () {
            location.reload()
        }
    });
}

渲染正常,删除工作正常。如何发送要在javascript函数中存档的订单?我尝试了onClick="archiveOrder(" + order + ")"onClick="archiveOrder(#{order})"一个生成

<button class="btn btn-success" onClick="archiveOrder([object Object])" title="Archive order = hide from list">
  <i class="fa fa-archive"></i>
</button>

从逻辑上讲,由于我认为是Uncaught SyntaxError: Unexpected identifier字符串,因此失败[object Object]

第二次尝试导致orders:23 Uncaught SyntaxError: Invalid or unexpected token

如何将对象order从哈巴狗循环发送到其余端点?

解决方法

HTML无法呈现对象。因此,您可以使用JSON.stringify()

将对象变成a
button.btn.btn-success(onClick="archiveOrder(" + JSON.stringify(order) + ")")

您将在标记中看到一个JSON字符串。相反的是JSON.parse()将其解析回一个对象。