我的代码中出现意外行为

时间:2011-05-07 08:29:10

标签: javascript backbone.js

我有以下代码:

var myApp = {
  Models: {},
  Views:  {},
  Collections: {},
  Controllers: {},
  init: function() {
    new this.Controllers.Main();
    Backbone.history.start();
  }
}

myApp.Models.User = Backbone.Model.extend({
  idAttribute : '_id',
  url         : 'currentUser',
  initialize  : function() {
    this.fetch();
  }
});

myApp.Controllers.Main = Backbone.Controller.extend({
  initialize: function() {
    this.currentUser = new myApp.Models.User();
  },
  routes: {
    ''            : 'index',
  },
  index: function() {
    console.log('index called');
    console.log(this.currentUser);                 // shows the correct object
    console.log(this.currentUser.attributes);      // empty object ?
    console.log(this.currentUser.toJSON());        // empty object ?
    console.log(this.currentUser.get('name'));     // undefined ?
  }
});

$(function() {
  myApp.init();
});

我缺少什么?

2 个答案:

答案 0 :(得分:0)

如果您执行new myApp.Models.User();,则会创建一个新的空User ..它怎么会有属性..

您没有指定ID,所以如何从服务器获取?

并且您没有指定默认值..

所以这对我来说似乎是连贯的,不是吗?

答案 1 :(得分:0)

这是一个异步问题。 Fetch正在进行异步Ajax调用,它将返回但尚未设置任何值。做那样的事情:

this.currentUser.bind("change:id", function(){
  //your console logs
});

当获取成功并且在模型上设置了id时,将调用日志。