我认为这是一件容易的事情,但我被卡住了。这是代码:
在服务器上:
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 是 session 中登录用户的 ID。所以如果调用/api/currentuser 方法,我会得到响应
{
_id: 6161616161619hjksk
name: 'Devesh Kumar'
}
现在在 Backbone Marionette 中,我使用一个模型和一个项目 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 中呈现此类应用程序级 View ?请帮忙
最佳答案
由于 url 对于每个当前用户实例都是相同的,请尝试使用此定义:
var CurrentUser = Backbone.Model.extend({url: '/api/currentuser' });
url
将简单地返回提供的字符串,而 urlRoot
将尝试使用用户 ID 生成正确的完整 url。
那么,你应该能够:
var currentuser = new CurrentUser();
currentUser.fetch();
var currentuser_view = new CurrentUserView({
collection: currentUser
});
当然,您需要确保在呈现 View 之前已从服务器获取用户信息,否则您将收到“名称未定义”错误。您可以在这篇博文中了解如何同步您的代码,以便 View 在呈现之前等待数据:http://davidsulc.com/blog/2013/04/01/using-jquery-promises-to-render-backbone-views-after-fetching-data/
关于backbone.js - 不带 id 的 Backbone 模型获取(用于显示登录用户的详细信息),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17183870/