1

嘿伙计们,我是一个刚刚开始研究 nodejs 的菜鸟。我正在使用 Compoundjs 在 nodejs 上开发一个 Web 应用程序。

这是我的视图文件夹的结构

views/
|-- admin
|   |-- games
|   |-- squadplayertypes
|   `-- toursection
|       |-- tourformats
|       |-- tourmatchtypes
|       `-- tours
|-- layouts
|   |-- admin
|   |   `-- toursection

我创建了一个名称空间来处理所有指向“/admin”的请求。

现在我想知道是否有可以为命名空间“admin”内的所有路由定义公共布局的地方。

这就是我编写 routes.js 的方式

    admin.namespace('toursection', function(toursection){
        toursection.resources('tours',function(tour){
            tour.post('fetchTourDetails','tours#fetchTourDetails',{collection:true});
        });
        toursection.resources('tourmatchtypes');
        toursection.resources('tourformats');
    });
    /*Routes for squad players and all related dependancies*/
    admin.resources('squadplayers');
4

2 回答 2

3

不幸的是,目前似乎没有办法做到这一点(至少在命名空间区域中)。布局在控制器扩展库中搜索,其中控制器的名称用于搜索布局,然后默认在应用程序布局上。

但是,可以定义在多个视图之间使用的一种布局。您可以使用layout控制器顶部的功能来更改布局。例如,我可以定义app/views/layouts/reports_layout.ejs报告命名空间的布局。

示例命名空间:

map.namespace('reports', function (reports) {
    reports.resources('billing');
});

控制器:

layout('reports');

action('index', function () {
    this.title = 'Billing Report';
    render();
});
于 2013-09-17T21:21:29.837 回答
1

好吧,我相信@making3 已经指出了一种标准的方法。尽管可以在应用程序控制器中进行肮脏的黑客攻击,但如果您确定属于您的管理部分的 url 将始终包含/admin/并且此类 url 只会加载管理布局,您可以遵循以下方法并将以下代码添加到您的应用程序控制器

before('mylayout', function(){
    if(req._parsedUrl.pathname.indexOf('/admin/') != -1)
        layout('admin/admin');
    next();
});

这添加了一个 before 处理程序,它在没有查询参数的情况下检查当前 url,如果它包含/admin/,它将为使用 admin 命名空间路由调用的所有控制器操作设置布局。

希望这可以帮助。

编辑:正如@guruwinder 所指出的那样,如果您已将路由配置为以:param 方式接受参数,这将失败。所以在使用它之前请小心。

于 2013-09-18T06:27:55.797 回答