2014-01-25 5 views
2

Мне просто нужно использовать функцию res.render в некоторых местах, но она не передается обратному вызову, который я использую. Разве нет где-то глобальной версии функции рендеринга или есть ли другой способ получить к ней доступ?SailsJS: как получить доступ к функции res.render из любого места

ответ

2

Это не необходимо все мест, действительно.

res - объект ответа, и он имеет смысл только в контроллерах, поскольку только контроллеры имеют дело с обработкой запросов и откликом ответа.

Вы хотите использовать res.render от моделей, услуг? Может быть, это потому, что вы думаете, что весь ваш код всегда находится в we_have_request_and_user_is_waiting_for_response состоянии. Ну, это неправда: методы и сервисы модели можно вызвать из консоли парусов или из фоновых работников или из кода, чем по расписанию. В этих случаях у нас нет объекта res.

Контроллеры предназначены специально для того, чтобы содержать ответные действия пользователей. Итак, вы должны поместить эту логику в контроллеры. MVC

+0

Мне нужно получить доступ к res.render в методе «afterCreate» модели, так что я могу отправить по электронной почте. –

1

Технически предыдущий динамик несколько прав: есть причина, что res существует только внутри контроллеров. Например, что, если это приложение CLI, и просто нет запроса/ответа по HTTP-значению?

Сказанное: если вам просто нужно отобразить какой-либо HTML-код для той или иной цели, вы всегда можете использовать средство отображения Global Express, которое не требует ответа: оно доступно через sails.express.app.render, см. Express' documentation для метода Титулы.

+1

Это будет работать в версии v..9.x с предостережением о том, что методы локализации недоступны. Но 'sails.express' не будет доступен в будущих версиях Sails. Тем не менее, функция глобального представления рендеринга может быть доступна в версии 10.10. – sgress454

3

В парусов v0.10.4 есть

sails.renderView(viewPath, options, callback); 

Кроме того, при оказании электронной почты, вы, вероятно, не нужно использовать макет. Поэтому перед вызовом sails.renderView добавить

options.layout = false; 
+0

Я чувствую, что это должен быть принятый ответ. Это решает проблему без необходимости утверждать OP для переосмысления намерений. –

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