【问题标题】:jquery not updating handlebars partial view correctly when submitting a form (express, node.js)提交表单时jquery未正确更新车把部分视图(express,node.js)
【发布时间】:2015-08-17 00:59:19
【问题描述】:

我正在使用带有 Express 和 Handlebars 的 Node.JS。我在更新特定 div 以及发送数据时遇到了麻烦。

我会先从10'级别问问题,因为可能没有必要回答细节。当我使用href='blah' 并设置一个 jquery 函数时,Express 会做正确的事情,只是更新 div 而不更新整个页面。

但是,当我在 <form method="post" .... 上使用相同的代码时,它反而会丢弃我的布局,不会转到 jquery 调用,而是会渲染我通过 Express 路由到的整个车把页面。

为什么这些不同,我应该怎么做?

如果不清楚,那么这里是代码:

在我的视图目录中,我有:index.handlebars、view1.handlebars、temp.handlebars。

在 view1.handlebars 里面,我有一个form

<form method="post" action="/update_this" enctype="multipart/form-data" data-id="{{data.uniqueId}}">

还有一个div

<div id="sectional">
    {{> partial}}
</div>

当有人点击button 时,我想更新div 部分。所以我像这样使用jquery:

$('#btn-here').on('click', function(event) {
    event.preventDefault();
    var id_num = $(this).data('id'); //id_num is correct

    $.get("/temp/" + id_num, function(res) {
       var updated_html = res;
       $('#sectional').html(updated_html);
   });
});

我允许 jquery 通过以下方式找到 temp.handlebars 文件:

router.get('/temp/:id', view1.showstuff);

在 view1.showstuff 函数内部:

showstuff: function(req, res) {
            res.locals.model = model;
            res.render('temp/' + id, {layout: false});
        };

这会渲染整个页面,甚至会丢失 layout.handlebars 文件。

如前所述,如果我有一个带有href=... 的按钮,那么布局会保持不变,并且一切都会完美呈现。但是关于我正在执行post 请求而不是get 的事实会导致问题。

【问题讨论】:

  • 因为{layout: false}而丢失了布局
  • {layout: false} 表示不更新布局。这并不意味着关闭它。当您只更新布局的一部分时使用该设置。

标签: jquery node.js express handlebars.js


【解决方案1】:

jquery 可以使用$(&lt;someElement&gt;).load 将html 直接加载到元素中。这是文档:http://api.jquery.com/load/ 基本上,通过指向来自发送 html 的节点服务器的路由,.load 将用响应替换当前的 html。

【讨论】:

  • 感谢您的回复。但是 jquery 根本没有被调用。我有这个为'get'工作,但是当我将'get'更改为'post'时它会中断。您是否看到特定错误?
猜你喜欢
  • 2015-07-06
  • 1970-01-01
  • 2017-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多