JavaScript:无法访问对象属性

时间:2013-06-06 03:01:15

标签: javascript object backbone.js properties handlebars.js

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

这是我运行alert(JSON.stringify(user))时所得到的:

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

但这是我运行alert(user.username)时所得到的:

undefined

我也尝试了user["username"]同样的结果。这是在使用Handlebars的Backbone应用程序的上下文中。这是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);
  }
});

可能是什么原因引起了这样的问题?

3 个答案:

答案 0 :(得分:3)

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

console.log(user.get('username'));
or
cosole.log(user.attributes.username);

答案 1 :(得分:1)

这对我有用

   var user = {"username": "david", "biography": "Hello world."};
alert (user.username);
alert (user["username"]);

答案 2 :(得分:1)

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

Backbone可能会进行一些奇特的编码,以便更容易地使用其模型对象。因为他们认为你不想要他们放入的所有垃圾,所以他们为你提供了一个干净的toJSON()结果。

@Rayweb_on得到了答案的其余部分。