2011-05-15 29 views
4

我有一个布局 - 导航菜单。在快递教程中,只有老派的页面正在加载。整个旧页面将被丢弃,并且会下载一个新页面,其中包含所有布局,视图和部分视图。我想要导航菜单留下来。那我该怎么做?node.js Express - 如何异步获取部分视图

如果我可能弄错了这个网页架构请指导我。

+0

你说你想要的页面部分要像新的谷歌搜索页面,只有在飞行中加载部分页面? – jcolebrand 2011-05-15 05:49:32

+0

是的,这是我想要的 – kulebyashik 2011-05-15 16:26:52

+0

然后,你想要的不是真正的“表达”,而只是普通的老阿贾克斯。 – jcolebrand 2011-05-15 16:40:23

回答

10

正如@drachenstern所说,你只想呈现部分HTML片段,而不是包括布局在内的整个文档。你可以告诉快递使用跳过布局:

res.render('sometemplate', {layout: false}); 

如果您想寻找Ajax请求以区别于全页浏览器加载,使用req.xhr标志as documented here

因此你甚至可以不要

res.render('sometemplate', {layout: !req.xhr}); 
+1

你选择'req.isXMLHttpRequest'的任何理由在别名'req.xhr'上;) – 2011-06-17 06:00:54

+3

它只是一个更清晰的名字。如果我有选择,我通常更喜欢更容易阅读代码的代码,这些代码更易于编写。 – 2011-06-17 14:14:05

+0

对我来说'req.isXMLHttpRequest'返回undefined,使用express 3.x,任何猜测为什么? – 2013-02-23 07:48:49

0

您还可以使用res.partial(),它是专门用于渲染的谐音。

下面是它的用法,其中“browse.jade”是模板的名称的示例:

exports.browse = function(req, res){ 
    var Contact = mongoose.model('Contact'); 
    Contact.where({}).asc('surname', 'given_name', 'org').run(function(err, results) { 
    res.partial('browse', { 
     locals: { data: results } 
    }); 
    }); 
}; 
+1

'res.partial()'现在已被弃用并从Express 3.x中删除。他们建议使用块:https://github.com/visionmedia/express/wiki/Migrating-from-2.x-to-3.x – 2014-06-16 21:22:51