【问题标题】:Call view from view SailsJS从视图 SailsJS 调用视图
【发布时间】:2015-01-23 20:07:16
【问题描述】:

好的,所以我开始使用基于 NodeJS 的 SailsJS。我使用的模板引擎是EJS(全部默认)。

我不知道如何实现以下目标:

称为“主”的父视图:

<!DOCTYPE html>
<html>
<body>
<div id="someDiv"><%- subviewContent %></div>
</body>
</html>

子视图:

<% main(subviewContent = {
<p>I am inside someDiv of main parent view!</p>
}); %>

控制器应该渲染“子视图”,子视图调用main,最后我们有一个完整的html页面。看起来如此逻辑和简单,但我找不到任何东西。 有没有人有建议,或者我应该切换模板引擎吗?

【问题讨论】:

    标签: html node.js view sails.js ejs


    【解决方案1】:

    您正在寻找layout templates 或view partials。

    布局模板

    如果您想要一个layout templates(母版页),对于每个页面都具有相同的正文,该正文由特定路由生成:

    Sails 布局是您应用的 views/ 文件夹中的特殊 .ejs 文件 可以用来“包裹”或“夹心”其他视图。布局通常包含 序言(例如!DOCTYPE html....)和 结论(。布局永远不会在没有视图的情况下使用——这将 就像为某人提供面包三明治一样。为您的应用提供布局支持 可以在 config/views.js 中配置或禁用,并且可以 通过设置特殊的本地来覆盖特定路线或动作 称为布局。默认情况下,Sails 将使用 布局位于views/layout.ejs。

    查看部分

    如果您想在多个视图中重复使用视图的一部分(部分),例如侧边栏或与我们联系的嵌入式表单,您可以使用view partial 来实现。

    Sails 在其视图渲染代码中使用 ejs-locals,因此在您的视图中您可以这样做:

    <%- partial ('foo.ejs') %>
    

    渲染位于 /views/foo.ejs 的部分。您的所有本地人都将自动发送到部分。 路径是相对于视图的,即加载部分。因此,如果您在 /views/users/view.ejs 有一个用户视图并且想要加载 /views/partials/widget.ejs,那么您可以使用:

    <%- partial ('../../partials/widget.ejs') %>
    

    【讨论】:

    • 恐怕不行。除非你可以让一个布局调用另一个布局,否则这不是我想要的。 View Partial 是相反的(你调用父视图,它会调用子视图,但我需要渲染子视图,它调用父视图)。简而言之:类似于布局模板,但递归(布局调用另一个布局,它可以调用另一个布局等)。
    • 您的问题没有提到需要多个父布局.. 带有母版页 html 的布局和根据控制器而变化的主体回答了您声明的要求。如果您正在寻找其他我愿意提供帮助的东西,您能澄清一下缺少什么吗?
    • 嗯,只是反过来。您的方式解释了以下方式:父视图 » 子视图 » 子视图 » 子视图而我想要以下方式:子视图 » 子视图 » 父视图
    • 啊我明白了,你想在子视图中定义父布局的名称,对吗?
    • 我想你明白了。我想从我的控制器返回子视图,子视图会调用父视图并带有一些可选参数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-06
    • 2017-10-07
    • 1970-01-01
    • 1970-01-01
    • 2013-06-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多