2013-06-19 1 views
2

Я думал, что это непростая вещь, но я застрял. Вот код:Модель базовой модели без идентификатора (для отображения информации о пользователе)

На сервере:

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 марионеток Я использую модель и Item View, чтобы показать имя пользователя (и его _id и другие детали могут быть)

Backbone:

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? Пожалуйста, помогите

ответ

6

Поскольку 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/

+0

Thanks David. Я прочитал твою книгу «Марионетта»: нежное введение. Это потрясающе. Лучшее, что я прочитал в Backbone. Спасибо –

+0

Спасибо за добрые слова, я попытался сделать его лучшим письменным ресурсом, чтобы узнать Marionette. –