Playframework 如何在游戏中处理!用jsAction框架一个表单帖子?

Playframework 如何在游戏中处理!用jsAction框架一个表单帖子?,playframework,sammy.js,Playframework,Sammy.js,我和它斗争了一段时间,没有结果。我希望以表单形式输入并提交的数据被呈现为同一页面上表的新行(无需重新加载页面)。我目前拥有的是一个包含多个字段的项目模型, 具有saveItem操作的控制器: public static void saveItem(@Valid SoldItem item) {... ,当然还有表格: <tr class="itemNew"> <td> <input type="image" id="saveItem" na

我和它斗争了一段时间,没有结果。我希望以表单形式输入并提交的数据被呈现为同一页面上表的新行(无需重新加载页面)。我目前拥有的是一个包含多个字段的项目模型, 具有
saveItem
操作的控制器:

public static void saveItem(@Valid SoldItem item) {...
,当然还有表格:

<tr class="itemNew">
    <td>
        <input type="image" id="saveItem" name="&{'Save'}" alt="&{'Save'}" height="16" src="/public/images/001_06.png" form="itemsTable"/>
        <a href="#/cancelEdits"><image id="cancelEdits" src="/public/images/001_05.png" alt="&{'Cancel'}" title="&{'Cancel'}" height="16"></a>
    </td>

    <td>
        <div class="item">
            <input class="itemDesc" type="text" size="30" name="item.item.name" placeholder="&{'item.name'}" />
        </div>
        <div class="item">
            <textarea class="itemDesc" rows="2" cols="30" name="item.item.description" placeholder="&{'item.description'}" ></textarea>
        </div>
    </td>

jsAction
的文档没有涵盖此类问题,我找不到任何示例,因此请帮助我。

我认为这一行是错误的

var action = #{jsAction @Invoices.saveItem(item_def) /};
应该是

var action = #{jsAction @Invoices.saveItem(item) /};

您正在下一行中将
item_def
分配给
item
,但该项不存在,因此不会发送或输出任何内容。

因此我提出的解决方案是:

    this.post('#/saveItem', function (context) {
        var items = this.params.toHash();
        var action = #{jsAction @Invoices.saveItem() /};
        this.send($.post, action(), items)
            .then(function(contents) {
                this.swap(contents);
            });
    });

我在地图上找到了一些解释。当从表单发布时,不需要创建完整的查询URL。所有参数都应作为post正文发送。上面的例子显示了框架(内部)的使用,它工作得很好。

这里的
项是什么?我还没有定义这样的变量。
action({item:item_def})
表示,将变量
item_def
放入变量
item
,并且
item
是控制器中变量的名称。
var action = #{jsAction @Invoices.saveItem(item) /};
    this.post('#/saveItem', function (context) {
        var items = this.params.toHash();
        var action = #{jsAction @Invoices.saveItem() /};
        this.send($.post, action(), items)
            .then(function(contents) {
                this.swap(contents);
            });
    });