3

我认为这是一件容易的事情,但我被困住了。这是代码:

在服务器上:

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 是会话中登录用户的 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 中呈现这样的应用程序级视图?请帮忙

4

1 回答 1

7

由于每个当前用户实例的 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
});

当然,您需要确保在渲染视图之前已经从服务器获取了用户信息,否则您将收到“名称未定义”错误。您可以在此博客文章中了解如何同步您的代码,以便视图在呈现之前等待数据:http: //davidsulc.com/blog/2013/04/01/using-jquery-promises-to-render-backbone-获取数据后的视图/

于 2013-06-19T08:29:06.677 回答