如何处理compoundjs中不同命名空间的单独布局

嘿家伙,我是一个刚刚开始在nodejs工作的noob。 我正在开发一个使用复合jj的nodejs上的web应用程序。

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

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

我创build了一个名称空间来处理所有针对“/ 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'); 

不幸的是, 目前看起来似乎没有办法做到这一点(至less在命名空间领域是整洁的)。 在控制器扩展库中search布局,其中控制器的名称用于search布局,然后在应用布局上默认。

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

示例命名空间:

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

控制器:

 layout('reports'); action('index', function () { this.title = 'Billing Report'; render(); }); 

我相信@ making3已经指出了一个标准的方法来做到这一点。 虽然在应用程序控制器中可以进行一些肮脏的操作,但是如果您确定属于您的pipe理部分的url总是拥有/ admin / ,并且这些URL只会加载pipe理布局,您可以按照以下方法并将下面的代码添加到您的应用程序控制器

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

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

希望这可以帮助。

编辑:正确如@guruwinder指出,如果你已经configurationpath接受参数:param时尚将失败。 所以在使用前请小心。