我的代码中出现意外行为

发布于 2024-11-05 18:48:47 字数 942 浏览 1 评论 0原文

我有以下代码:

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();
});

我缺少什么?

I have the following code:

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();
});

What am i missing ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

四叶草在未来唯美盛开 2024-11-12 18:48:47

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

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

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

This is an asynchronous problem. Fetch is doing an asynchronous Ajax call, it will return but no values will be set yet. Do something like that:

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

When the fetch succeed and an id is set on the model, the logs will be called.

夜巴黎 2024-11-12 18:48:47

如果你这样做 new myApp.Models.User(); ,你会创建一个新的空 User ..它怎么可能有属性..

你没有指定一个 id 所以如何从服务器获取它?

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

所以对我来说这似乎是一致的,不是吗?

If you do new myApp.Models.User(); , you create a new empty User .. How could it have attributes ..

You didn't specify an id so how could it be fetched from the server ?

And you didn't specify defaults values ..

So it seems coherent to me, no ?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文