Dev*_*mar 3 backbone.js backbone-views marionette
我认为这是一件容易的事,但我被困住了.这是代码:
在服务器上:
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'));
}
});
});
Run Code Online (Sandbox Code Playgroud)
其中req.currentUser.id是从会话登录用户的id.所以如果调用/ api/currentuser方法,我得到一个响应
{
_id: 6161616161619hjksk
name: 'Devesh Kumar'
}
Run Code Online (Sandbox Code Playgroud)
现在在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);
Run Code Online (Sandbox Code Playgroud)
模板:
<%= name %>
Run Code Online (Sandbox Code Playgroud)
但是,有一个错误.它说名字没有定义.当我设置一个CollectionView和一个ItemView时,它可以正确渲染.但就我而言,不需要设置集合
作为一般问题,如何在Backbone中呈现此类应用程序级别视图?请帮忙
由于每个当前用户实例的url都是相同的,因此请尝试使用以下定义:
var CurrentUser = Backbone.Model.extend({url: '/api/currentuser' });
Run Code Online (Sandbox Code Playgroud)
url将简单地返回提供的字符串,而urlRoot将尝试使用用户ID生成正确的完整URL.
然后,你应该能够:
var currentuser = new CurrentUser();
currentUser.fetch();
var currentuser_view = new CurrentUserView({
collection: currentUser
});
Run Code Online (Sandbox Code Playgroud)
当然,您需要确保在呈现视图之前已从服务器获取用户信息,否则您将收到"未定义名称"错误.您可以在此博客文章中查看如何同步代码,以便视图在呈现之前等待数据:http://davidsulc.com/blog/2013/04/01/using-jquery-promises-to-render-backbone-视图-后取数据/