Node.js 如何处理单页web应用的多个视图

Node.js 如何处理单页web应用的多个视图,node.js,pug,Node.js,Pug,因此,我正在构建一个简单的node.js web应用程序。但我对单一的网络应用程序应该如何工作有点困惑。我现在不在fornt end使用backboneMVC。这个概念是我在页面上有两个选项卡,即文件夹和列表。因此,我希望能够通过restful URL(如host/Folder/{Folder id})显示文件夹的内容,并对列表执行相同的操作 如果我只是使用参数res.render视图模板以响应Restful请求,这似乎很好 但是,当这两个页面在同一个页面上,并且必须通过点击标签才能访问而不离开

因此,我正在构建一个简单的node.js web应用程序。但我对单一的网络应用程序应该如何工作有点困惑。我现在不在fornt end使用backboneMVC。这个概念是我在页面上有两个选项卡,即文件夹和列表。因此,我希望能够通过restful URL(如host/Folder/{Folder id})显示文件夹的内容,并对列表执行相同的操作

如果我只是使用参数res.render视图模板以响应Restful请求,这似乎很好

但是,当这两个页面在同一个页面上,并且必须通过点击标签才能访问而不离开主页时,我感到困惑。通过使用带有#标记的前端路由,我可能可以让它工作(因此您最终使用的是host/index.html#/folder/{id}


所以我想知道,是否有更简单的方法使用部分模板,我可以通过jade模板部分切换主页的一部分,而无需离开index.html?

您可能想查看Page.js以在单页应用程序中加载模板,()这也是来自Visionmedia,就是那些制造翡翠的人


我发现对于小规模的应用程序/站点来说,它比主干更容易理解。

我以前没有尝试过直接渲染部分,但是如果我理解你的问题,你能这样做吗

创建视图以生成部分输出。使用路由为您提供端点以从中获取它们。从您的站点触发一些javascript,用该端点的输出替换(比如)一个块

可能看起来像这样: 在routes.js中:

app.get('/folder/:id', folders.show)
在controllers/folders.js中:

exports.create = function (req,res){
  res.render('folders/partial')
}
在文件夹/show.jade中:

button#tab1
.tab
  .result
然后使用一些简单的jquery将站点上的内容替换为部分内容:

$('#tab1').click(function() {
  $.get('/folder/:id', function(data) {
    $('.result').html(data);
  })
})
你可以看看。它有助于将静态内容推送到浏览器

它可以将jade模板预编译成javascript函数,然后在客户端上呈现。语法非常简单:

new JadeAsset({
  url: '/templates.js',
  dirname: './templates'
});
因此,如果您的模板目录如下所示:

index.jade
contact.jade
user/
    profile.jade
    info.jade
$('body').append(Templates['index']());
$('body').append(Templates['user/profile']({username: 'brad', status: 'fun'}));
$('body').append(Templates['user/info']());
然后在客户端上引用您的模板,如下所示:

index.jade
contact.jade
user/
    profile.jade
    info.jade
$('body').append(Templates['index']());
$('body').append(Templates['user/profile']({username: 'brad', status: 'fun'}));
$('body').append(Templates['user/info']());
这里有一个链接:


*person Visionmedia只是他的把柄。是的,这是我的想法,有点像是从ajax结果构建html,应该是肯定的,但我不知道是否有一种“玉”的方式。我认为如果它像看上去的那样工作的话,它更接近布拉德上面的回答。js似乎也更接近express堆栈。