如何处理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布局,然后在应用布局上默认。
但是,可以在多个视图之间定义一个要使用的布局。 您可以使用控制器顶部的layout
function来更改布局。 例如,我可以为报告命名空间定义布局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时尚将失败。 所以在使用前请小心。