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

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

На сервере:

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, он может правильно отображаться. Но в моем случае не нужно устанавливать коллекцию

Общий вопрос: как мне отображать такие представления уровня приложения в Backbone? Пожалуйста помоги


person Devesh Kumar    schedule 19.06.2013    source источник


Ответы (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/

person David Sulc    schedule 19.06.2013
comment
Спасибо, Дэвид. Я читал вашу книгу «Марионетка: нежное введение». Это потрясающе. Лучшее, что я читал в Backbone. Спасибо - person Devesh Kumar; 19.06.2013
comment
Спасибо за добрые слова, я старался сделать его лучшим письменным ресурсом для изучения Марионетки. - person David Sulc; 19.06.2013