Выборка модели магистрали без идентификатора (для отображения сведений о зарегистрированных пользователях)


Я думал, что это будет легкая вещь, но я застрял. Вот код:

На Сервере:

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 3

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/