2015-11-04 7 views
3

Я новичок в SailsJS, поэтому у меня есть вопрос об частичном просмотре.Sails js render partial view

Я пришел из .NET и частичных представлений в ASP.NET MVC гораздо умнее, чем в парусах. В .NET MVC я могу предоставить некоторый контроллер как частичный путь просмотра, и этот контроллер будет выполнен, и частичное представление будет отображаться с данными контроллера.

Например, я хочу показать информацию об учетной записи в углу моего веб-сайта. Поэтому в .NET я могу вызвать частичный вид, предоставляя путь к контроллеру, этот контроллер будет запрашивать информацию об учетной записи, предоставлять ее частичному представлению, а затем этот результат будет вставлен в основное представление. В Sails я могу вызвать частичный вид, но все данные (locals) для частичного просмотра будут перемещены туда с основного вида. Так я должен поместить информацию о счете в каждый контроллер в приложении?

Как я могу решить эту проблему? В других вопросах я обнаружил, что могу принять имя пользователя от req.session, но он не решает всех случаев. Как я могу показать три случайные темы в нижнем колонтитуле страницы, например?

ответ

0

Я думаю, что вы смотрите на неправильное место относительно частичных просмотров. Это проблема с интерфейсом. Что я использую для таких частичных представлений, это Угловой UI-маршрутизатор. На самом деле я не уверен, что использование углового в этом решении для вас, поэтому я буду держать это в курсе. Если вы чувствуете, что мой метод полезен, вы можете прокомментировать его, и я подробнее расскажу о том, как это сделать.

0

В зависимости от модели двигателя, которую вы используете.

С помощью ejs вы можете использовать <%- include('someview') %> или <%- include('someview', { mydata: { foo: bar} }) %> Последний позволяет включить файл include несколько раз с данными diff. Например. <%- include('someview', { mydata: foo }) %> скопирует foo (из местных жителей) в ключ mydata. Это будет добавлено к местным жителям, поэтому все остальные местные жители также доступны.

Что касается предоставления фактических данных, вы можете использовать службу парусов. Просто добавьте данные в res.locals.myKeyForTheInclude.

Вам нужно будет позвонить в службу каждый раз. Но вы можете добавить его в config/http в качестве промежуточного программного обеспечения.

middleware: { 
    myFoo: myService.myFunc, 
    order: [ 
    ... 
    'myFoo', // before router 
    'router', 
    ... 
], 

Все, что осталось, это то, что каждый шаблон нуждается в включении. Вы не можете этого избежать, только шаблон знает, где должен быть include. Но если вы используете макет, возможно, он вписывается в макет.