我是SailsJS的新手,所以我对渲染部分视图有疑问。
我来自.NET世界,ASP.NET MVC中的部分视图比帆更聪明。在.NET MVC中,我可以提供一些控制器作为部分视图路径,这个控制器将被执行,部分视图将使用该控制器数据呈现。
例如,我想在我网站的角落显示一些帐户信息。因此在.NET中我可以调用部分视图,提供控制器路径,该控制器将查询帐户信息,将其提供给局部视图,然后将此结果插入到主视图中。 在Sails中,我可以调用部分视图,但部分视图的所有数据(本地)都将从主视图中推送到那里。所以我必须在应用程序中的每个控制器中放置帐户信息吗?
我该如何解决这个问题?
在其他问题中,我发现我可以从req.session
获取用户名,但它并不能解决所有情况。例如,如何在页脚中显示三个随机主题?
答案 0 :(得分:0)
我认为你正在寻找关于部分观点的错误地方。 这是一个前端问题。我用于这种局部视图的是Angular UI-router。实际上我不确定使用角度是否在你的解决方案的范围内,所以我会保持这个简短。如果您认为我的方法很有用,您可以对其进行评论,并且我将进一步详细说明如何执行该方法。
答案 1 :(得分:0)
取决于您使用的模板引擎。
使用ejs,您可以使用<%- include('someview') %>
或<%- include('someview', { mydata: { foo: bar} }) %>
后者允许使用diff数据多次调用include文件。例如。 <%- include('someview', { mydata: foo }) %>
会将foo(从本地人)复制到mydata密钥。这将添加到本地人,因此所有其他本地人也可用。
至于提供实际数据,您可以使用风帆服务。只需将数据添加到res.locals.myKeyForTheInclude即可。
您每次都必须致电该服务。 但您可以将它作为中间件添加到config / http中。
middleware: {
myFoo: myService.myFunc,
order: [
...
'myFoo', // before router
'router',
...
],
剩下的就是每个模板都需要包含。 你无法避免这种情况,只有模板知道包含的位置。 但是如果你使用布局,那么它可能适合布局。