Backbone Model fetch without id(用于显示登录用户详细信息)

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中呈现此类应用程序级别视图?请帮忙

Dav*_*ulc 7

由于每个当前用户实例的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-视图-后取数据/