backbone.js - 不带 id 的 Backbone 模型获取(用于显示登录用户的详细信息)

标签 backbone.js marionette backbone-views

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

在服务器上:

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/

相关文章:

javascript - 主干网中的路由器不工作

javascript - 单击或按 Enter 时触发 Backbone 事件

backbone.js - 使用没有数据源的 Backbone Collection(无 url)

javascript - 从 Marionette View 使用 Handlebars 模板中定义的 DOM 元素

javascript - 主干路由器工作不正常

javascript - 主干 View 不会显示

javascript - 使用 Rails 和 Backbone 上的混合面板实现复杂的跟踪

events - 如何在 View 中使用 Backbone.EventBinder

javascript - 使用 Marionette 最大限度地减少回流

javascript - 将主干 View 事件处理程序或 jQuery 事件处理程序包装在 try catch block 中