Backbone.js:Collection.get()问题

时间:2012-02-15 20:26:50

标签: backbone.js

使用Backbone.js,在从服务器获取项目后尝试对集合执行简单的get()。

Fetch似乎工作正常。但是,当我尝试从集合中获取id的项目时,我得到了未定义的意外结果,而不是模型。

这是我的骨干项目代码:

  Model.Scenario = Backbone.Model.extend({

    defaults: function() {
      return {
        title: 'Scenario',
        answer: null,
      };
    }

  });

  Collection.Scenarios = Backbone.Collection.extend({

    model: Model.Scenario,

    url: "data.php",


  });

然后在路由器方法中使用obj创建/获取:

 var Router = new (Backbone.Router.extend({

    routes: {
      ":id"    : "page",
      "" : "page"
    },

    initialize: function() {
      _.bindAll(this, 'page');
      this.scenarios = new Collection.Scenarios();
      this.scenarios.fetch();
      console.log(this.scenarios);
      console.log(this.scenarios.get(1));
      console.log(this.scenarios.get(2));

      Backbone.history.start();
    },

  }))();

最后,这是记录到调试器的内容(因此您可以看到正在填充Collection):

child
  _byCid: Object
  _byId: Object
    1: child
    2: child
    3: child
    4: child
    7: child
    10: child
    11: child
    12: child
    13: child
    14: child
    15: child
    16: child
    17: child
    18: child
    19: child
    20: child
    21: child
    22: child
    23: child
    26: child
    27: child
    28: child
  __proto__: Object
  length: 22
  models: Array[22]
  __proto__: ctor

 undefined  //first call to get(id)
 undefined  //2nd call to get(id)

我很难过。对于这篇长篇文章感到抱歉,但我很欣赏任何有关我缺少的信息。感谢。

1 个答案:

答案 0 :(得分:3)

我的第一个想法是,当您执行.get()时,fetch()尚未返回。

但是,如果您发布的内容正是发生的事情,那么第一个console.log(this.scenarios)显示已加载IS。

无论如何,您可能想尝试将console.logs放入成功:获取事件中,以确保不是问题。

我的第二个想法是模型的ID没有正确设置。

Backbone.Model默认使用属性“id”作为模型的ID,Collection.get(id)返回带有您传入的id的模型。

那么,data.php的响应是否有id属性?

尝试改为:

 var Router = new (Backbone.Router.extend({

    routes: {
      ":id"    : "page",
      "" : "page"
    },

    initialize: function() {
      _.bindAll(this, 'page');
      this.scenarios = new Collection.Scenarios();
      this.scenarios.fetch({
        success: function(coll, resp) {
          console.log(coll);
          console.log(coll.first());
          console.log(coll.last());
        });
      Backbone.history.start();
    },

  }))();

哪个应返回第一个和最后一个模型,并将ID问题从图片中删除。

如果有效,模型会为id属性显示什么(coll.first()。id)?