【问题标题】:jquery not updating handlebars partial view correctly (express, node.js)jquery 没有正确更新车把部分视图(express,node.js)
【发布时间】:2015-07-06 17:12:36
【问题描述】:

已更新以展示如何使其工作。我在下面接受的答案并没有真正显示太多代码,一切都在 cmets 中结束。所以为了简单起见,我在这里展示了正确的代码(我的原始代码有 3 个错误)。

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

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

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

<button type="button"  id="btn-here" data-id="{{data.uniqueId}}"><a href="../update_this">Update This</a></button>

还有一个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});
        };

现在这会发送视图数据并仅更新 jquery 调用中指定的视图。

感谢下方用户的帮助!

【问题讨论】:

  • 如果您在浏览器中转到http://yoursite.com/temp.html 会发生什么?你只是得到temp.html的内容还是整个index.html的内容?
  • 好吧,因为我使用的是带有 express(和把手)的 Node.JS,所以我收到浏览器无法“GET /temp.html”的错误消息。我的 routes.js 文件中没有它作为路由。
  • 当您请求temp.html 时,Chrome 开发工具的“网络”选项卡会返回什么内容? temp.html 是您期望获得的实际文件吗?如果是这样,您将需要配置路由以允许您通过某个 URL 获取它。
  • 好吧,我打印以控制台它“获取”的文件的内容,它是索引页面,而不是我的 temp.html 页面。我真的很困惑它是如何得到这个的。
  • 这与您的路线配置方式有关。我建议您发布:1)您项目的基本文件结构,包括temp.html 的位置。 2)路由配置代码。 3)您尝试点击#btn-here按钮的页面的URL。

标签: jquery node.js express handlebars.js


【解决方案1】:

您需要一个路由器处理程序,如下所示

app.get('/temp.html', function (req, res, next) {
    res.render('temp', {layout: false});
});

或者将你的 temp.html 放在公共文件夹中,但是你不能使用 {{> partials}} 因为它没有被视图引擎处理

【讨论】:

  • 您的意思是完全摆脱 jquery 调用而只使用渲染?但是它怎么知道只更新分区 div 呢?
  • 不,jQuery 没问题。但是对于 jquery $.get("temp.html"... 要工作,您需要 app.get('/temp.html'... 服务器上的处理程序,或者如果 temp.html 是静态 html 文件,您可以放置它在公共文件夹中
  • 好的,为了让事情顺利进行,我最初在 public 文件夹中有 temp.html。但是我想以正确的方式做事,所以我将文件放回视图目录,然后添加了这个 res.render 调用。我得到了同样的行为。索引页出现在我的#section div 中!我从 jquery 调用中打印“res”的输出,它肯定是在加载 index.handlebars,而不是我的 temp.handlebars 文件。
  • 如果 temp.html 是静态 html 则将其放入公用文件夹是正确的方法
  • 它最终实际上不会是静态的。我这样做是因为我试图调试我的问题。我修改了对代码的描述以显示当前结构。同样的问题。
猜你喜欢
  • 2015-08-17
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 2013-01-15
  • 1970-01-01
  • 2016-03-19
  • 2013-06-28
  • 1970-01-01
相关资源
最近更新 更多