2015-11-04 276 views
3

我是SailsJS中的新成员,所以我有一个关于渲染局部视图的问题。Sails js渲染局部视图

我来自.NET世界,ASP.NET MVC中的部分视图比sails更聪明。在.NET MVC中,我可以提供一些控制器作为局部视图路径,并且该控制器将被执行,并且局部视图将与该控制器数据一起呈现。

例如,我想在我的网站的角落显示一些帐户信息。因此,在.NET中,我可以调用局部视图,提供控制器路径,此控制器将查询帐户信息,将其提供给局部视图,然后将此结果插入主视图。 在帆中,我可以调用部分视图,但部分视图的所有数据(本地)将从主视图中推送到那里。所以我必须将每个控制器中的帐户信息放入应用程序中?

我该如何解决这个问题? 在其他问题,我发现我可以从req.session采取用户名,但它并不能解决所有情况。如何在页脚中显示三个随机主题,例如?

回答

0

我认为你正在寻找有关部分视图的错误地方。 这是一个前端问题。我用于这种局部视图的是Angular UI-router。其实我不确定是否在你的解决方案的范围内使用angular,所以我会保持这个简短。如果您觉得我的方法很有用,可以对其进行评论,然后我会进一步详细说明如何执行此操作。

0

取决于您使用的模板引擎。

使用ejs,您可以使用<%- include('someview') %><%- include('someview', { mydata: { foo: bar} }) %> 后者允许使用差异数据多次调用包含文件。例如。 <%- include('someview', { mydata: foo }) %>将foo(从本地)复制到mydata项。这将被添加到当地人,所以所有其他当地人也可用。

至于提供的实际数据,您可以使用sails服务。只需将数据添加到res.locals.myKeyForTheInclude即可。

您将不得不每次致电该服务。 但您可以将它作为中间件添加到config/http中。

middleware: { 
    myFoo: myService.myFunc, 
    order: [ 
    ... 
    'myFoo', // before router 
    'router', 
    ... 
], 

剩下的就是每个模板都需要include。 你不能避免这种情况,只有模板知道包含应该在哪里。 但是,如果您使用布局,也许它适合布局。