2015-04-03 4 views
2

Мне нелегко пытаться передать объект в макет моего проекта, чтобы получить список категорий, которые нужно показать на панели навигации. Я пытаюсь сделать пару решений здесь, и все связано с использованием политики и назначением res.locals.myVar = someObj, проблема в том, что res.locals, а также с использованием req.options.locals.myVar доступны только в действии контроллера но не макетПередача объекта в представлении/layout.ejs в sails.js

До сих пор я получил это.

// getRoomList ПОЛИТИКА

Room.find().exec(function(err, rooms) { 
    if (err) { 
     return res.badRequest('Something went wrong.'); 
    } 
    if (rooms) { 
     res.locals.roomlist = rooms; 
     next(); 
    } else { 
     res.notFound(); 
    } 
}); 

// конфиг/политика

'*': 'getRoomList' 

// В layout.ejs

<%= roomlist %> 

ответ

0

Я думаю, его хорошо использовать политику для сохранения данных в res.locals, но в моей реализации я сохраняю данные на самом запросе и отправляю их на просмотр в контроллере (It смотрит мне яснее)

конфигурации/политики/getCategories

module.exports = function(req, res, next){ 
    Categories.find().exec(function(err, models) { 
     if (err) return res.badRequest("Error"); 
     req.categories = models; 
     next(); 
    }); 
} 

API/контроллеры/ABCController.js

module.exports = { 
    index : function(req, res, next){ 
     res.view('page/index', { 
      categories : req.categories 
     }); 
    } 
} 

конфигурации/policies.js

ABCController : { 
    index: ['getCategories', 'getProfiles'] 
    // add this policy to any page who needs nav bar categories 
} 

** конфигурации/routes.js

'/home/': { 
    controller: "ABCController", 
    action: "index" 
} 
+1

Проблема здесь состоит в том, что я не хочу никакого конкретного представления для обработки навигационной панели категорий. «Навигационная панель» находится в макете. – adavia

+0

В этом случае ваше решение лучше, я думаю, чтобы каждый запрос имел одну и ту же политику для сохранения переменных res.locals –

+0

Ну, проблема в том, что мое решение не будет работать для этого случая. – adavia

Смежные вопросы