0

我无法访问简单对象的属性。

这是我跑步时得到的alert(JSON.stringify(user))

{"username": "david", "biography": "Hello world."}

但这是我跑步时得到的alert(user.username)

undefined

我也尝试user["username"]过同样的结果。这是在使用 Handlebars 的 Backbone 应用程序的上下文中。这是主干部分:

var User = Backbone.Model.extend({
  urlRoot: 'http://api.example.com/user',
});

var Router = Backbone.Router.extend({
  routes: {
    ":username": "profile"
  },
  profile: function (username) {
    var user = new User({id: username});
    user.fetch({
      beforeSend: authenticate,
      success: function() {
        var profile = new Profile({user: user});
        profile.render();
      }
    });
  }
});

var Profile = Backbone.View.extend({
  render: function() {
    var source = $("#profile").html();
    var template = Handlebars.compile(source);
    user = this.options.user;
    var html = template(user);
    $("#content section").html(html);
  }
});

什么可能导致这样的问题?

4

3 回答 3

3

如果您的用户对象是骨干模型,那么试试这个

console.log(user.get('username'));
or
cosole.log(user.attributes.username);
于 2013-06-06T03:09:21.333 回答
1

这对我有用

   var user = {"username": "david", "biography": "Hello world."};
alert (user.username);
alert (user["username"]);
于 2013-06-06T03:07:48.667 回答
1

JSON.stringify 将查找 toJSON 函数并将其返回值用作它使用的 JSON。

Backbone 可能做了一些花哨的编码,以使其更容易使用它的模型对象。由于他们认为您不想要他们放入的所有垃圾,他们为您提供了一个干净的 toJSON() 结果。

@Rayweb_on 有剩下的答案。

于 2013-06-06T03:09:39.960 回答