Выборка модели магистрали без идентификатора (для отображения сведений о зарегистрированных пользователях)
Я думал, что это будет легкая вещь, но я застрял. Вот код:
На Сервере:
app.get('/api/currentuser',function(req,res){
User.findOne({ _id: req.currentUser.id },'name',function(err, user_details) {
if (err) {
return next(err);
}
if (user_details) {
res.send(user_details);
} else {
return next(new NotFound('Could not find any such user'));
}
});
});
Где req.currentUser.id это идентификатор пользователя, вошедшего в систему из сеанса. Поэтому, если вызовите/api / currentuser метод, я получаю ответ
{
_id: 6161616161619hjksk
name: 'Devesh Kumar'
}
Теперь в Backbone Marionette я использую модель и представление элемента, чтобы показать имя пользователя (и его _id и другие детали могут быть)
Позвоночник:
var CurrentUser = Backbone.Model.extend({urlRoot: '/api/currentuser' });
var CurrentUserView = Marionette.ItemView.extend({
template: "#current-user-view"
});
var currentuser = new CurrentUser();
var currentuser_view = new CurrentUserView({
collection: currentuserdetails
});
Completepp.rightRegion.show(currentuser_view);
Шаблон:
<%= name %>
Однако здесь есть одна ошибка. Там написано: имя не определено. Когда я устанавливаю CollectionView и ItemView, то он может правильно отрисовываться. Но в моем случае не нужно устанавливать коллекцию
В качестве общего вопроса, как я могу визуализировать такие представления уровня приложения в магистрали? Пожалуйста, Помогите
1 ответ:
Поскольку url-адрес будет одинаковым для каждого текущего экземпляра пользователя, попробуйте использовать следующее определение:
var CurrentUser = Backbone.Model.extend({url: '/api/currentuser' });
url
просто вернет предоставленную строку, в то время какurlRoot
попытается сгенерировать правильный полный url-адрес с идентификатором пользователя.Тогда вы должны иметь:
var currentuser = new CurrentUser(); currentUser.fetch(); var currentuser_view = new CurrentUserView({ collection: currentUser });
Конечно, вы должны убедиться, что пользовательская информация была получена с сервера перед отображением представления, или вы получите ошибку "имя не определено". Вы можете увидеть, как синхронизировать ваши код таким образом, представление ожидает данные перед отображением в этом блоге: http://davidsulc.com/blog/2013/04/01/using-jquery-promises-to-render-backbone-views-after-fetching-data/