Backbone + Parse.com Collection.fetch()使用事件回调返回空数组

时间:2013-04-26 21:06:02

标签: backbone.js parse-platform backbone-boilerplate

我开始使用parse.com开发一个Web应用程序,但我遇到了一个简单的问题。 我将模型(或Parse SDK中的对象)定义为:

Book.Model = Parse.Object.extend("book", {
    // Default attributes for the book.
    defaults: {
      title: "placeholder...",
    },

    // Ensure that each book created has `title`.
    initialize: function() {
      if (!this.get("title")) {
        this.set({"title": this.defaults.title});
      }
    },

  });

和一个集合:

Book.List = Parse.Collection.extend({

    // Reference to this collection's model.
    model: Book.Model,

    initialize: function() {
    },

  });

然后,如果我尝试类似

的话
   var books = new Book.List();
   books.fetch({
        success: function(collection) {
            console.warn(collection);
        },
        error: function(collection, error) {
           // The collection could not be retrieved.
        }
    });

一切都很顺利。经度:

child {length: 5, models: Array[5], _byId: Object, _byCid: Object, model: function…}
_byCid: Object
_byId: Object
length: 5
models: Array[5]
__proto__: EmptyConstructor

但如果我尝试使用事件回调而不是成功方法,我会得到一个空数组。代码:

books.on('reset', this.log());
books.fetch();

    log: function() {
      console.log(books);
    }

并记录:

child {length: 0, models: Array[0], _byId: Object, _byCid: Object, model: function…}
_byCid: Object
_byId: Object
length: 5
models: Array[5]
__proto__: EmptyConstructor

这很奇怪(因为我认为每个解决方案都等待从服务器填充集合)。有人知道为什么会这样吗?

我实际上使用的是Backbone Boilerplate和Parse.com js SDK。

1 个答案:

答案 0 :(得分:1)

Collection#fetch行为已更改,默认情况下用于重置集合,但从1.0.0 it merges the new models开始使用set

  

当模型数据从服务器返回时,它使用 set 来(智能地)合并获取的模型,除非您通过{reset: true},[...]

set不会触发"reset"个事件,它会触发其他事件:

  

当发生这种情况时,会触发所有相应的"add""remove""change"事件。

如果您希望fetch重置收藏品,则必须这样说:

books.fetch({ reset: true });